{
 "cells": [
  {
   "cell_type": "markdown",
   "source": [
    "## 过拟合原因\n",
    "* 1.模型拥有大量参数\n",
    "* 2.训练数据少"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%% md\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch:0, train acc:0.11, test acc:0.0758\n",
      "epoch:1, train acc:0.10666666666666667, test acc:0.0775\n",
      "epoch:2, train acc:0.10333333333333333, test acc:0.0801\n",
      "epoch:3, train acc:0.12, test acc:0.0877\n",
      "epoch:4, train acc:0.14, test acc:0.1056\n",
      "epoch:5, train acc:0.16666666666666666, test acc:0.1241\n",
      "epoch:6, train acc:0.21333333333333335, test acc:0.1437\n",
      "epoch:7, train acc:0.23333333333333334, test acc:0.1637\n",
      "epoch:8, train acc:0.2633333333333333, test acc:0.1919\n",
      "epoch:9, train acc:0.27, test acc:0.2069\n",
      "epoch:10, train acc:0.28, test acc:0.2175\n",
      "epoch:11, train acc:0.3, test acc:0.2278\n",
      "epoch:12, train acc:0.31333333333333335, test acc:0.2386\n",
      "epoch:13, train acc:0.32666666666666666, test acc:0.2649\n",
      "epoch:14, train acc:0.36, test acc:0.2772\n",
      "epoch:15, train acc:0.37, test acc:0.2905\n",
      "epoch:16, train acc:0.38333333333333336, test acc:0.2952\n",
      "epoch:17, train acc:0.4166666666666667, test acc:0.3146\n",
      "epoch:18, train acc:0.43333333333333335, test acc:0.3134\n",
      "epoch:19, train acc:0.45666666666666667, test acc:0.3135\n",
      "epoch:20, train acc:0.48, test acc:0.3334\n",
      "epoch:21, train acc:0.5, test acc:0.3347\n",
      "epoch:22, train acc:0.52, test acc:0.3427\n",
      "epoch:23, train acc:0.5066666666666667, test acc:0.348\n",
      "epoch:24, train acc:0.53, test acc:0.3507\n",
      "epoch:25, train acc:0.5566666666666666, test acc:0.3704\n",
      "epoch:26, train acc:0.5533333333333333, test acc:0.3717\n",
      "epoch:27, train acc:0.59, test acc:0.3927\n",
      "epoch:28, train acc:0.59, test acc:0.3988\n",
      "epoch:29, train acc:0.5966666666666667, test acc:0.4058\n",
      "epoch:30, train acc:0.59, test acc:0.4045\n",
      "epoch:31, train acc:0.6133333333333333, test acc:0.4179\n",
      "epoch:32, train acc:0.62, test acc:0.424\n",
      "epoch:33, train acc:0.6166666666666667, test acc:0.4276\n",
      "epoch:34, train acc:0.61, test acc:0.4335\n",
      "epoch:35, train acc:0.6166666666666667, test acc:0.4336\n",
      "epoch:36, train acc:0.6266666666666667, test acc:0.4473\n",
      "epoch:37, train acc:0.6233333333333333, test acc:0.4509\n",
      "epoch:38, train acc:0.6266666666666667, test acc:0.4616\n",
      "epoch:39, train acc:0.6333333333333333, test acc:0.4698\n",
      "epoch:40, train acc:0.6466666666666666, test acc:0.4841\n",
      "epoch:41, train acc:0.65, test acc:0.4951\n",
      "epoch:42, train acc:0.6533333333333333, test acc:0.497\n",
      "epoch:43, train acc:0.6633333333333333, test acc:0.5158\n",
      "epoch:44, train acc:0.6766666666666666, test acc:0.5421\n",
      "epoch:45, train acc:0.68, test acc:0.5462\n",
      "epoch:46, train acc:0.68, test acc:0.5456\n",
      "epoch:47, train acc:0.6733333333333333, test acc:0.5547\n",
      "epoch:48, train acc:0.6966666666666667, test acc:0.5665\n",
      "epoch:49, train acc:0.6866666666666666, test acc:0.5679\n",
      "epoch:50, train acc:0.7033333333333334, test acc:0.5753\n",
      "epoch:51, train acc:0.7066666666666667, test acc:0.5826\n",
      "epoch:52, train acc:0.7166666666666667, test acc:0.5883\n",
      "epoch:53, train acc:0.7133333333333334, test acc:0.5865\n",
      "epoch:54, train acc:0.73, test acc:0.6053\n",
      "epoch:55, train acc:0.7466666666666667, test acc:0.6087\n",
      "epoch:56, train acc:0.7366666666666667, test acc:0.6085\n",
      "epoch:57, train acc:0.72, test acc:0.5952\n",
      "epoch:58, train acc:0.74, test acc:0.6093\n",
      "epoch:59, train acc:0.7566666666666667, test acc:0.6178\n",
      "epoch:60, train acc:0.7633333333333333, test acc:0.6306\n",
      "epoch:61, train acc:0.7633333333333333, test acc:0.636\n",
      "epoch:62, train acc:0.76, test acc:0.6285\n",
      "epoch:63, train acc:0.77, test acc:0.6306\n",
      "epoch:64, train acc:0.78, test acc:0.6419\n",
      "epoch:65, train acc:0.76, test acc:0.6422\n",
      "epoch:66, train acc:0.7866666666666666, test acc:0.6527\n",
      "epoch:67, train acc:0.7833333333333333, test acc:0.649\n",
      "epoch:68, train acc:0.79, test acc:0.6467\n",
      "epoch:69, train acc:0.7866666666666666, test acc:0.6563\n",
      "epoch:70, train acc:0.77, test acc:0.6485\n",
      "epoch:71, train acc:0.7833333333333333, test acc:0.6485\n",
      "epoch:72, train acc:0.8166666666666667, test acc:0.6652\n",
      "epoch:73, train acc:0.8166666666666667, test acc:0.6696\n",
      "epoch:74, train acc:0.81, test acc:0.6626\n",
      "epoch:75, train acc:0.7933333333333333, test acc:0.6596\n",
      "epoch:76, train acc:0.8166666666666667, test acc:0.6677\n",
      "epoch:77, train acc:0.8333333333333334, test acc:0.6718\n",
      "epoch:78, train acc:0.8333333333333334, test acc:0.6683\n",
      "epoch:79, train acc:0.82, test acc:0.6655\n",
      "epoch:80, train acc:0.8166666666666667, test acc:0.6733\n",
      "epoch:81, train acc:0.84, test acc:0.6756\n",
      "epoch:82, train acc:0.8266666666666667, test acc:0.6808\n",
      "epoch:83, train acc:0.8233333333333334, test acc:0.6751\n",
      "epoch:84, train acc:0.84, test acc:0.6773\n",
      "epoch:85, train acc:0.8433333333333334, test acc:0.682\n",
      "epoch:86, train acc:0.8433333333333334, test acc:0.6815\n",
      "epoch:87, train acc:0.8566666666666667, test acc:0.6894\n",
      "epoch:88, train acc:0.8633333333333333, test acc:0.6848\n",
      "epoch:89, train acc:0.8533333333333334, test acc:0.6887\n",
      "epoch:90, train acc:0.86, test acc:0.6846\n",
      "epoch:91, train acc:0.8533333333333334, test acc:0.6818\n",
      "epoch:92, train acc:0.8533333333333334, test acc:0.6866\n",
      "epoch:93, train acc:0.8466666666666667, test acc:0.6887\n",
      "epoch:94, train acc:0.8666666666666667, test acc:0.6898\n",
      "epoch:95, train acc:0.8666666666666667, test acc:0.6938\n",
      "epoch:96, train acc:0.8566666666666667, test acc:0.7019\n",
      "epoch:97, train acc:0.85, test acc:0.6954\n",
      "epoch:98, train acc:0.8433333333333334, test acc:0.6918\n",
      "epoch:99, train acc:0.8533333333333334, test acc:0.6875\n",
      "epoch:100, train acc:0.8566666666666667, test acc:0.6981\n",
      "epoch:101, train acc:0.87, test acc:0.7017\n",
      "epoch:102, train acc:0.87, test acc:0.7031\n",
      "epoch:103, train acc:0.8733333333333333, test acc:0.705\n",
      "epoch:104, train acc:0.86, test acc:0.7013\n",
      "epoch:105, train acc:0.8566666666666667, test acc:0.6926\n",
      "epoch:106, train acc:0.8733333333333333, test acc:0.7006\n",
      "epoch:107, train acc:0.87, test acc:0.7076\n",
      "epoch:108, train acc:0.8733333333333333, test acc:0.7108\n",
      "epoch:109, train acc:0.8733333333333333, test acc:0.7063\n",
      "epoch:110, train acc:0.8766666666666667, test acc:0.7074\n",
      "epoch:111, train acc:0.87, test acc:0.7079\n",
      "epoch:112, train acc:0.8733333333333333, test acc:0.7052\n",
      "epoch:113, train acc:0.87, test acc:0.7058\n",
      "epoch:114, train acc:0.87, test acc:0.7081\n",
      "epoch:115, train acc:0.8733333333333333, test acc:0.7033\n",
      "epoch:116, train acc:0.8766666666666667, test acc:0.7048\n",
      "epoch:117, train acc:0.87, test acc:0.7128\n",
      "epoch:118, train acc:0.8733333333333333, test acc:0.708\n",
      "epoch:119, train acc:0.87, test acc:0.7145\n",
      "epoch:120, train acc:0.8766666666666667, test acc:0.7121\n",
      "epoch:121, train acc:0.8666666666666667, test acc:0.7095\n",
      "epoch:122, train acc:0.8666666666666667, test acc:0.7085\n",
      "epoch:123, train acc:0.87, test acc:0.7094\n",
      "epoch:124, train acc:0.8733333333333333, test acc:0.7084\n",
      "epoch:125, train acc:0.8933333333333333, test acc:0.7139\n",
      "epoch:126, train acc:0.88, test acc:0.7161\n",
      "epoch:127, train acc:0.8766666666666667, test acc:0.7157\n",
      "epoch:128, train acc:0.88, test acc:0.7171\n",
      "epoch:129, train acc:0.88, test acc:0.7188\n",
      "epoch:130, train acc:0.8833333333333333, test acc:0.714\n",
      "epoch:131, train acc:0.88, test acc:0.7141\n",
      "epoch:132, train acc:0.88, test acc:0.7066\n",
      "epoch:133, train acc:0.8766666666666667, test acc:0.7095\n",
      "epoch:134, train acc:0.8733333333333333, test acc:0.7103\n",
      "epoch:135, train acc:0.8866666666666667, test acc:0.7112\n",
      "epoch:136, train acc:0.8733333333333333, test acc:0.7105\n",
      "epoch:137, train acc:0.88, test acc:0.7151\n",
      "epoch:138, train acc:0.87, test acc:0.7147\n",
      "epoch:139, train acc:0.88, test acc:0.718\n",
      "epoch:140, train acc:0.8833333333333333, test acc:0.7199\n",
      "epoch:141, train acc:0.8833333333333333, test acc:0.7218\n",
      "epoch:142, train acc:0.8866666666666667, test acc:0.7149\n",
      "epoch:143, train acc:0.88, test acc:0.7162\n",
      "epoch:144, train acc:0.8833333333333333, test acc:0.7163\n",
      "epoch:145, train acc:0.8866666666666667, test acc:0.7265\n",
      "epoch:146, train acc:0.8866666666666667, test acc:0.7218\n",
      "epoch:147, train acc:0.8866666666666667, test acc:0.7275\n",
      "epoch:148, train acc:0.89, test acc:0.7247\n",
      "epoch:149, train acc:0.8833333333333333, test acc:0.7235\n",
      "epoch:150, train acc:0.8966666666666666, test acc:0.7215\n",
      "epoch:151, train acc:0.8833333333333333, test acc:0.7104\n",
      "epoch:152, train acc:0.8833333333333333, test acc:0.7164\n",
      "epoch:153, train acc:0.8833333333333333, test acc:0.7197\n",
      "epoch:154, train acc:0.8833333333333333, test acc:0.7221\n",
      "epoch:155, train acc:0.8866666666666667, test acc:0.7251\n",
      "epoch:156, train acc:0.89, test acc:0.7262\n",
      "epoch:157, train acc:0.8966666666666666, test acc:0.7256\n",
      "epoch:158, train acc:0.8933333333333333, test acc:0.7216\n",
      "epoch:159, train acc:0.8833333333333333, test acc:0.7193\n",
      "epoch:160, train acc:0.8866666666666667, test acc:0.7263\n",
      "epoch:161, train acc:0.8866666666666667, test acc:0.7241\n",
      "epoch:162, train acc:0.9, test acc:0.7274\n",
      "epoch:163, train acc:0.8933333333333333, test acc:0.7227\n",
      "epoch:164, train acc:0.8966666666666666, test acc:0.7232\n",
      "epoch:165, train acc:0.8833333333333333, test acc:0.7234\n",
      "epoch:166, train acc:0.8933333333333333, test acc:0.7244\n",
      "epoch:167, train acc:0.8966666666666666, test acc:0.7221\n",
      "epoch:168, train acc:0.9033333333333333, test acc:0.7228\n",
      "epoch:169, train acc:0.8866666666666667, test acc:0.72\n",
      "epoch:170, train acc:0.8966666666666666, test acc:0.7262\n",
      "epoch:171, train acc:0.88, test acc:0.7231\n",
      "epoch:172, train acc:0.88, test acc:0.7267\n",
      "epoch:173, train acc:0.8933333333333333, test acc:0.7319\n",
      "epoch:174, train acc:0.8933333333333333, test acc:0.7255\n",
      "epoch:175, train acc:0.9, test acc:0.7277\n",
      "epoch:176, train acc:0.9, test acc:0.7261\n",
      "epoch:177, train acc:0.8933333333333333, test acc:0.7256\n",
      "epoch:178, train acc:0.89, test acc:0.7244\n",
      "epoch:179, train acc:0.8833333333333333, test acc:0.7207\n",
      "epoch:180, train acc:0.8766666666666667, test acc:0.7196\n",
      "epoch:181, train acc:0.8733333333333333, test acc:0.7087\n",
      "epoch:182, train acc:0.87, test acc:0.7109\n",
      "epoch:183, train acc:0.89, test acc:0.7153\n",
      "epoch:184, train acc:0.88, test acc:0.7142\n",
      "epoch:185, train acc:0.9, test acc:0.7209\n",
      "epoch:186, train acc:0.8933333333333333, test acc:0.7293\n",
      "epoch:187, train acc:0.88, test acc:0.7178\n",
      "epoch:188, train acc:0.8933333333333333, test acc:0.7237\n",
      "epoch:189, train acc:0.8966666666666666, test acc:0.7272\n",
      "epoch:190, train acc:0.89, test acc:0.7235\n",
      "epoch:191, train acc:0.89, test acc:0.7249\n",
      "epoch:192, train acc:0.8933333333333333, test acc:0.7259\n",
      "epoch:193, train acc:0.91, test acc:0.7268\n",
      "epoch:194, train acc:0.91, test acc:0.7336\n",
      "epoch:195, train acc:0.8966666666666666, test acc:0.7291\n",
      "epoch:196, train acc:0.8933333333333333, test acc:0.7249\n",
      "epoch:197, train acc:0.8966666666666666, test acc:0.7274\n",
      "epoch:198, train acc:0.8966666666666666, test acc:0.7289\n",
      "epoch:199, train acc:0.8833333333333333, test acc:0.731\n",
      "epoch:200, train acc:0.89, test acc:0.7324\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "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laysLCIjIx2+wFJubi4JCQmkpKR45ZCXt78+8P7XqNfn+bz9Ner1eT5nvUbDMMjLyyM+Pr7eti4NN1FRUZjNZtLT06scT09Pr1wM6fdiY2Mb1D4gIICAgIAqx8LDwxtftB1CQ0O99g8teP/rA+9/jXp9ns/bX6Nen+dzxmusr8emgkuvlvL396d///4sWbKk8pjVamXJkiUMGTKkxscMGTKkSnuAxYsX19peREREziwuH5aaMmUKEyZMYMCAAQwaNIjZs2dTUFDAxIkTARg/fjxt2rRh1qxZADzwwANcdNFFvPjii4waNYqPPvqI9evX8+9//9uVL0NERETchMvDzdixYzl27BhPPfUUaWlp9OnTh0WLFlVOGj506FCVpZjPPfdcPvjgA5544gn+/Oc/07lzZ7788kt69OjhqpdQKSAggOnTp1cbBvMW3v76wPtfo16f5/P216jX5/nc4TW6fJ0bEREREUdy+QrFIiIiIo6kcCMiIiJeReFGREREvIrCjYiIiHgVhRsHefXVV+nQoQOBgYEMHjyYtWvXurqkRpk1axYDBw4kJCSE6OhoxowZw549e6q0ufjiizGZTFW+7r77bhdV3HBPP/10tfq7detWeX9xcTGTJk0iMjKSli1bct1111VbONKddejQodrrM5lMTJo0CfDM9+/HH39k9OjRxMfHYzKZqu0lZxgGTz31FHFxcQQFBTF06FD27t1bpU1WVhY333wzoaGhhIeHc8cdd5Cfn9+Mr6J2db2+srIypk6dSs+ePWnRogXx8fGMHz+eo0ePVjlHTe/7s88+28yvpGb1vX+33XZbtdpHjhxZpY07v39Q/2us6e+kyWTi+eefr2zjzu+hPZ8N9vzbeejQIUaNGkVwcDDR0dE8+uijlJeXO7xehRsHmD9/PlOmTGH69Ols3LiR3r17M2LECDIyMlxdWoOtWLGCSZMm8csvv7B48WLKysoYPnw4BQUFVdrdddddpKamVn4999xzLqq4cc4+++wq9f/888+V9z300EMsWLCATz75hBUrVnD06FGuvfZaF1bbMOvWravy2hYvXgzADTfcUNnG096/goICevfuzauvvlrj/c899xz/+Mc/mDt3LmvWrKFFixaMGDGC4uLiyjY333wzO3bsYPHixXzzzTf8+OOP/PGPf2yul1Cnul5fYWEhGzdu5Mknn2Tjxo18/vnn7Nmzh6uuuqpa22eeeabK+3rfffc1R/n1qu/9Axg5cmSV2j/88MMq97vz+wf1v8bTX1tqairz5s3DZDJx3XXXVWnnru+hPZ8N9f3babFYGDVqFKWlpaxatYp33nmHt99+m6eeesrxBRvSZIMGDTImTZpU+bPFYjHi4+ONWbNmubAqx8jIyDAAY8WKFZXHLrroIuOBBx5wXVFNNH36dKN379413pednW34+fkZn3zySeWxXbt2GYCxevXqZqrQsR544AGjY8eOhtVqNQzD898/wPjiiy8qf7ZarUZsbKzx/PPPVx7Lzs42AgICjA8//NAwDMPYuXOnARjr1q2rbPPdd98ZJpPJOHLkSLPVbo/fv76arF271gCMgwcPVh5r37698fLLLzu3OAeo6fVNmDDBuPrqq2t9jCe9f4Zh33t49dVXG5deemmVY57yHhpG9c8Ge/7t/Pbbbw0fHx8jLS2tss3rr79uhIaGGiUlJQ6tTz03TVRaWsqGDRsYOnRo5TEfHx+GDh3K6tWrXViZY+Tk5AAQERFR5fh///tfoqKi6NGjB9OmTaOwsNAV5TXa3r17iY+P56yzzuLmm2/m0KFDAGzYsIGysrIq72e3bt1o166dR76fpaWlvP/++9x+++1VNor19PfvdPv37yctLa3KexYWFsbgwYMr37PVq1cTHh7OgAEDKtsMHToUHx8f1qxZ0+w1N1VOTg4mk6naPnnPPvsskZGR9O3bl+eff94p3f3Osnz5cqKjo+natSv33HMPx48fr7zP296/9PR0Fi5cyB133FHtPk95D3//2WDPv52rV6+mZ8+elYv0AowYMYLc3Fx27Njh0PpcvkKxp8vMzMRisVR5swBiYmLYvXu3i6pyDKvVyoMPPsh5551XZQXoP/zhD7Rv3574+Hi2bt3K1KlT2bNnD59//rkLq7Xf4MGDefvtt+natSupqanMmDGDCy64gO3bt5OWloa/v3+1D42YmBjS0tJcU3ATfPnll2RnZ3PbbbdVHvP09+/3Kt6Xmv4OVtyXlpZGdHR0lft9fX2JiIjwuPe1uLiYqVOnMm7cuCqbEt5///3069ePiIgIVq1axbRp00hNTeWll15yYbX2GTlyJNdeey2JiYkkJyfz5z//mcsvv5zVq1djNpu96v0DeOeddwgJCak23O0p72FNnw32/NuZlpZW49/TivscSeFGajVp0iS2b99eZT4KUGWcu2fPnsTFxXHZZZeRnJxMx44dm7vMBrv88ssrb/fq1YvBgwfTvn17Pv74Y4KCglxYmeP95z//4fLLLyc+Pr7ymKe/f2eysrIybrzxRgzD4PXXX69y35QpUypv9+rVC39/f/7v//6PWbNmuf1S/zfddFPl7Z49e9KrVy86duzI8uXLueyyy1xYmXPMmzePm2++mcDAwCrHPeU9rO2zwZ1oWKqJoqKiMJvN1WaEp6enExsb66Kqmm7y5Ml88803LFu2jLZt29bZdvDgwQDs27evOUpzuPDwcLp06cK+ffuIjY2ltLSU7OzsKm088f08ePAgP/zwA3feeWed7Tz9/at4X+r6OxgbG1ttgn95eTlZWVke875WBJuDBw+yePHiKr02NRk8eDDl5eUcOHCgeQp0oLPOOouoqKjKP5Pe8P5V+Omnn9izZ0+9fy/BPd/D2j4b7Pm3MzY2tsa/pxX3OZLCTRP5+/vTv39/lixZUnnMarWyZMkShgwZ4sLKGscwDCZPnswXX3zB0qVLSUxMrPcxmzdvBiAuLs7J1TlHfn4+ycnJxMXF0b9/f/z8/Kq8n3v27OHQoUMe936+9dZbREdHM2rUqDrbefr7l5iYSGxsbJX3LDc3lzVr1lS+Z0OGDCE7O5sNGzZUtlm6dClWq7Uy3LmzimCzd+9efvjhByIjI+t9zObNm/Hx8ak2nOMJDh8+zPHjxyv/THr6+3e6//znP/Tv35/evXvX29ad3sP6Phvs+bdzyJAhbNu2rUpQrQjqSUlJDi9Ymuijjz4yAgICjLffftvYuXOn8cc//tEIDw+vMiPcU9xzzz1GWFiYsXz5ciM1NbXyq7Cw0DAMw9i3b5/xzDPPGOvXrzf2799vfPXVV8ZZZ51lXHjhhS6u3H4PP/ywsXz5cmP//v3GypUrjaFDhxpRUVFGRkaGYRiGcffddxvt2rUzli5daqxfv94YMmSIMWTIEBdX3TAWi8Vo166dMXXq1CrHPfX9y8vLMzZt2mRs2rTJAIyXXnrJ2LRpU+XVQs8++6wRHh5ufPXVV8bWrVuNq6++2khMTDSKiooqzzFy5Eijb9++xpo1a4yff/7Z6Ny5szFu3DhXvaQq6np9paWlxlVXXWW0bdvW2Lx5c5W/lxVXmKxatcp4+eWXjc2bNxvJycnG+++/b7Ru3doYP368i1+ZTV2vLy8vz3jkkUeM1atXG/v37zd++OEHo1+/fkbnzp2N4uLiynO48/tnGPX/GTUMw8jJyTGCg4ON119/vdrj3f09rO+zwTDq/7ezvLzc6NGjhzF8+HBj8+bNxqJFi4zWrVsb06ZNc3i9CjcO8s9//tNo166d4e/vbwwaNMj45ZdfXF1SowA1fr311luGYRjGoUOHjAsvvNCIiIgwAgICjE6dOhmPPvqokZOT49rCG2Ds2LFGXFyc4e/vb7Rp08YYO3assW/fvsr7i4qKjHvvvddo1aqVERwcbFxzzTVGamqqCytuuO+//94AjD179lQ57qnv37Jly2r8czlhwgTDMGyXgz/55JNGTEyMERAQYFx22WXVXvvx48eNcePGGS1btjRCQ0ONiRMnGnl5eS54NdXV9fr2799f69/LZcuWGYZhGBs2bDAGDx5shIWFGYGBgUb37t2NmTNnVgkHrlTX6yssLDSGDx9utG7d2vDz8zPat29v3HXXXdX+c+jO759h1P9n1DAM41//+pcRFBRkZGdnV3u8u7+H9X02GIZ9/3YeOHDAuPzyy42goCAjKirKePjhh42ysjKH12s6WbSIiIiIV9CcGxEREfEqCjciIiLiVRRuRERExKso3IiIiIhXUbgRERERr6JwIyIiIl5F4UZERES8isKNiJxxli9fjslkqrYPjoh4B4UbERER8SoKNyIiIuJVFG5EpNlZrVZmzZpFYmIiQUFB9O7dm08//RQ4NWS0cOFCevXqRWBgIOeccw7bt2+vco7PPvuMs88+m4CAADp06MCLL75Y5f6SkhKmTp1KQkICAQEBdOrUif/85z9V2mzYsIEBAwYQHBzMueeey549eyrv27JlC5dccgkhISGEhobSv39/1q9f76TfiIg4ksKNiDS7WbNm8e677zJ37lx27NjBQw89xC233MKKFSsq2zz66KO8+OKLrFu3jtatWzN69GjKysoAWyi58cYbuemmm9i2bRtPP/00Tz75JG+//Xbl48ePH8+HH37IP/7xD3bt2sW//vUvWrZsWaWOxx9/nBdffJH169fj6+vL7bffXnnfzTffTNu2bVm3bh0bNmzgsccew8/Pz7m/GBFxDIdvxSkiUofi4mIjODjYWLVqVZXjd9xxhzFu3LjK3ZU/+uijyvuOHz9uBAUFGfPnzzcMwzD+8Ic/GMOGDavy+EcffdRISkoyDMMw9uzZYwDG4sWLa6yh4jl++OGHymMLFy40AKOoqMgwDMMICQkx3n777aa/YBFpduq5EZFmtW/fPgoLCxk2bBgtW7as/Hr33XdJTk6ubDdkyJDK2xEREXTt2pVdu3YBsGvXLs4777wq5z3vvPPYu3cvFouFzZs3Yzabueiii+qspVevXpW34+LiAMjIyABgypQp3HnnnQwdOpRnn322Sm0i4t4UbkSkWeXn5wOwcOFCNm/eXPm1c+fOynk3TRUUFGRXu9OHmUwmE2CbDwTw9NNPs2PHDkaNGsXSpUtJSkriiy++cEh9IuJcCjci0qySkpIICAjg0KFDdOrUqcpXQkJCZbtffvml8vaJEyf49ddf6d69OwDdu3dn5cqVVc67cuVKunTpgtlspmfPnlit1ipzeBqjS5cuPPTQQ/zvf//j2muv5a233mrS+USkefi6ugARObOEhITwyCOP8NBDD2G1Wjn//PPJyclh5cqVhIaG0r59ewCeeeYZIiMjiYmJ4fHHHycqKooxY8YA8PDDDzNw4ED+8pe/MHbsWFavXs2cOXN47bXXAOjQoQMTJkzg9ttv5x//+Ae9e/fm4MGDZGRkcOONN9ZbY1FREY8++ijXX389iYmJHD58mHXr1nHdddc57fciIg7k6kk/InLmsVqtxuzZs42uXbsafn5+RuvWrY0RI0YYK1asqJzsu2DBAuPss882/P39jUGDBhlbtmypco5PP/3USEpKMvz8/Ix27doZzz//fJX7i4qKjIceesiIi4sz/P39jU6dOhnz5s0zDOPUhOITJ05Utt+0aZMBGPv37zdKSkqMm266yUhISDD8/f2N+Ph4Y/LkyZWTjUXEvZkMwzBcnK9ERCotX76cSy65hBMnThAeHu7qckTEA2nOjYiIiHgVhRsRERHxKhqWEhEREa+inhsRERHxKgo3IiIi4lUUbkRERMSrKNyIiIiIV1G4EREREa+icCMiIiJeReFGREREvIrCjYiIiHgVhRsRERHxKv8PmQCT/prnz3gAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 权值衰减\n",
    "# 300个训练数据， 7层网络\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "from dataset.mnist import load_mnist\n",
    "from common.optimizer import *\n",
    "from common.util import smooth_curve\n",
    "from common.multi_layer_net import MultiLayerNet\n",
    "\n",
    "# 0.读入MNIST数据\n",
    "(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True)\n",
    "\n",
    "# 减少学习数据\n",
    "x_train = x_train[:300]\n",
    "t_train = t_train[:300]\n",
    "\n",
    "# 超参数\n",
    "max_epochs = 201     # 训练轮数\n",
    "train_size = x_train.shape[0]   # 训练数据量\n",
    "batch_size = 100        # 单批次数量\n",
    "learning_rate = 0.01\n",
    "\n",
    "# 权值衰减\n",
    "weight_decay_lambda = 0.1\n",
    "\n",
    "def __train():\n",
    "    network = MultiLayerNet(input_size=784, hidden_size_list=[100, 100, 100, 100, 100, 100],output_size=10,\n",
    "                            weight_decay_lambda=weight_decay_lambda)\n",
    "    # 优化器使用SGD\n",
    "    optimizer = SGD(lr=learning_rate)\n",
    "\n",
    "    # 训练精准度列表\n",
    "    train_acc_list = []\n",
    "    test_acc_list = []\n",
    "\n",
    "    # 每一个epoch的循环次数\n",
    "    iter_per_epoch = max(train_size / batch_size, 1)\n",
    "    # 已执行epoch数量\n",
    "    epoch_cnt = 0\n",
    "\n",
    "    # 2.开始训练\n",
    "    for i in range(100000000000):\n",
    "         # 获取小批量数据\n",
    "        batch_mask = np.random.choice(train_size, batch_size)\n",
    "        x_batch = x_train[batch_mask]\n",
    "        t_batch = t_train[batch_mask]\n",
    "\n",
    "        # 计算梯度\n",
    "        grads = network.gradient(x_batch, t_batch)\n",
    "        optimizer.update(network.params, grads)\n",
    "\n",
    "        if i % iter_per_epoch == 0:\n",
    "            train_acc = network.accuracy(x_train, t_train)\n",
    "            test_acc = network.accuracy(x_test, t_test)\n",
    "            train_acc_list.append(train_acc)\n",
    "            test_acc_list.append(test_acc)\n",
    "            print(\"epoch:\" + str(epoch_cnt) + \", train acc:\" + str(train_acc) + \", test acc:\" + str(test_acc))\n",
    "            epoch_cnt += 1\n",
    "            if epoch_cnt >= max_epochs:\n",
    "                break\n",
    "    return train_acc_list, test_acc_list\n",
    "\n",
    "train_acc_list, test_acc_list = __train()\n",
    "\n",
    "# 绘制图像\n",
    "markers = {\"train\": \"o\", \"test\": \"s\"}\n",
    "x = np.arange(max_epochs)\n",
    "plt.plot(x, smooth_curve(train_acc_list), marker='o', label='train', markevery=10)\n",
    "plt.plot(x, smooth_curve(test_acc_list), marker='s', label='test', markevery=10)\n",
    "plt.xlabel(\"epochs\")\n",
    "plt.ylabel(\"accuracy\")\n",
    "plt.ylim(0, 1.0)\n",
    "plt.legend(loc='lower right')\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train loss: 2.2924584436016597\n",
      "=== epoch:  1 , train acc:  0.14 , test acc:  0.1351 ===\n",
      "train loss: 2.283612046432923\n",
      "train loss: 2.289726578812493\n",
      "train loss: 2.291376682845914\n",
      "=== epoch:  2 , train acc:  0.15 , test acc:  0.1391 ===\n",
      "train loss: 2.291654219345441\n",
      "train loss: 2.2975661480558256\n",
      "train loss: 2.283792248625506\n",
      "=== epoch:  3 , train acc:  0.14333333333333334 , test acc:  0.1448 ===\n",
      "train loss: 2.298181967605299\n",
      "train loss: 2.2926297015342745\n",
      "train loss: 2.28399263359062\n",
      "=== epoch:  4 , train acc:  0.15 , test acc:  0.15 ===\n",
      "train loss: 2.2874151859776464\n",
      "train loss: 2.276338566076765\n",
      "train loss: 2.28217215578437\n",
      "=== epoch:  5 , train acc:  0.15333333333333332 , test acc:  0.1506 ===\n",
      "train loss: 2.30146505488798\n",
      "train loss: 2.289688796703132\n",
      "train loss: 2.2787539888600707\n",
      "=== epoch:  6 , train acc:  0.15333333333333332 , test acc:  0.1553 ===\n",
      "train loss: 2.285195946852183\n",
      "train loss: 2.2928740628778512\n",
      "train loss: 2.278681646849246\n",
      "=== epoch:  7 , train acc:  0.15 , test acc:  0.1599 ===\n",
      "train loss: 2.287154391801838\n",
      "train loss: 2.2925652695213294\n",
      "train loss: 2.286832179527855\n",
      "=== epoch:  8 , train acc:  0.15666666666666668 , test acc:  0.1629 ===\n",
      "train loss: 2.2898123894547058\n",
      "train loss: 2.288886492546904\n",
      "train loss: 2.2807206006371645\n",
      "=== epoch:  9 , train acc:  0.17666666666666667 , test acc:  0.1656 ===\n",
      "train loss: 2.2804651195230785\n",
      "train loss: 2.290878846308837\n",
      "train loss: 2.267949613000272\n",
      "=== epoch:  10 , train acc:  0.18 , test acc:  0.168 ===\n",
      "train loss: 2.2748506371085497\n",
      "train loss: 2.2910214080693767\n",
      "train loss: 2.286174421101074\n",
      "=== epoch:  11 , train acc:  0.18333333333333332 , test acc:  0.171 ===\n",
      "train loss: 2.281020310913373\n",
      "train loss: 2.2827325137866055\n",
      "train loss: 2.278476187595012\n",
      "=== epoch:  12 , train acc:  0.18333333333333332 , test acc:  0.1757 ===\n",
      "train loss: 2.2775322364778403\n",
      "train loss: 2.27473596767779\n",
      "train loss: 2.2739662619177836\n",
      "=== epoch:  13 , train acc:  0.19666666666666666 , test acc:  0.1784 ===\n",
      "train loss: 2.28310655019183\n",
      "train loss: 2.2769859807835235\n",
      "train loss: 2.277113279288699\n",
      "=== epoch:  14 , train acc:  0.2 , test acc:  0.1834 ===\n",
      "train loss: 2.2773585104736283\n",
      "train loss: 2.272338179993531\n",
      "train loss: 2.2936512640388798\n",
      "=== epoch:  15 , train acc:  0.20333333333333334 , test acc:  0.1881 ===\n",
      "train loss: 2.292437028231212\n",
      "train loss: 2.272603808963283\n",
      "train loss: 2.271892533803793\n",
      "=== epoch:  16 , train acc:  0.2 , test acc:  0.1905 ===\n",
      "train loss: 2.2731124227549535\n",
      "train loss: 2.272422064002757\n",
      "train loss: 2.282215758097805\n",
      "=== epoch:  17 , train acc:  0.21 , test acc:  0.1922 ===\n",
      "train loss: 2.274137502108702\n",
      "train loss: 2.267493325569114\n",
      "train loss: 2.2709002003213867\n",
      "=== epoch:  18 , train acc:  0.21 , test acc:  0.1956 ===\n",
      "train loss: 2.2741671596183974\n",
      "train loss: 2.269686389807431\n",
      "train loss: 2.2750416949993855\n",
      "=== epoch:  19 , train acc:  0.20333333333333334 , test acc:  0.1966 ===\n",
      "train loss: 2.270751375448805\n",
      "train loss: 2.2816183941195227\n",
      "train loss: 2.2766785871661965\n",
      "=== epoch:  20 , train acc:  0.22333333333333333 , test acc:  0.1991 ===\n",
      "train loss: 2.2570099116302713\n",
      "train loss: 2.2747512661479306\n",
      "train loss: 2.2691214045369734\n",
      "=== epoch:  21 , train acc:  0.22 , test acc:  0.2005 ===\n",
      "train loss: 2.272075308496053\n",
      "train loss: 2.266617426256316\n",
      "train loss: 2.27933416214838\n",
      "=== epoch:  22 , train acc:  0.23333333333333334 , test acc:  0.2019 ===\n",
      "train loss: 2.267602520229932\n",
      "train loss: 2.27197519386782\n",
      "train loss: 2.2738911109165034\n",
      "=== epoch:  23 , train acc:  0.23666666666666666 , test acc:  0.2056 ===\n",
      "train loss: 2.2571294123384673\n",
      "train loss: 2.2779957683550527\n",
      "train loss: 2.259214851366674\n",
      "=== epoch:  24 , train acc:  0.24666666666666667 , test acc:  0.2066 ===\n",
      "train loss: 2.2640563908239644\n",
      "train loss: 2.263129920936815\n",
      "train loss: 2.270321387294376\n",
      "=== epoch:  25 , train acc:  0.26 , test acc:  0.2105 ===\n",
      "train loss: 2.2596620015550224\n",
      "train loss: 2.270341249149491\n",
      "train loss: 2.2632760532767273\n",
      "=== epoch:  26 , train acc:  0.26 , test acc:  0.2152 ===\n",
      "train loss: 2.249063719236068\n",
      "train loss: 2.2682018604930736\n",
      "train loss: 2.2632997171711757\n",
      "=== epoch:  27 , train acc:  0.26 , test acc:  0.216 ===\n",
      "train loss: 2.258284844504411\n",
      "train loss: 2.2430122031647493\n",
      "train loss: 2.259871221503592\n",
      "=== epoch:  28 , train acc:  0.26 , test acc:  0.2159 ===\n",
      "train loss: 2.2688640499290122\n",
      "train loss: 2.263107138813639\n",
      "train loss: 2.2363910210969373\n",
      "=== epoch:  29 , train acc:  0.25333333333333335 , test acc:  0.2177 ===\n",
      "train loss: 2.260503019562569\n",
      "train loss: 2.246713573441257\n",
      "train loss: 2.2444566349826705\n",
      "=== epoch:  30 , train acc:  0.25333333333333335 , test acc:  0.2139 ===\n",
      "train loss: 2.2498304166463767\n",
      "train loss: 2.247141809662362\n",
      "train loss: 2.2475902848192972\n",
      "=== epoch:  31 , train acc:  0.24666666666666667 , test acc:  0.209 ===\n",
      "train loss: 2.2544919644006556\n",
      "train loss: 2.245710825776807\n",
      "train loss: 2.248215121025011\n",
      "=== epoch:  32 , train acc:  0.25 , test acc:  0.2096 ===\n",
      "train loss: 2.250374836537573\n",
      "train loss: 2.259813950083311\n",
      "train loss: 2.24296992396603\n",
      "=== epoch:  33 , train acc:  0.25333333333333335 , test acc:  0.2101 ===\n",
      "train loss: 2.246673250582134\n",
      "train loss: 2.2473490050743044\n",
      "train loss: 2.2378575211104956\n",
      "=== epoch:  34 , train acc:  0.26 , test acc:  0.2088 ===\n",
      "train loss: 2.2421542359283695\n",
      "train loss: 2.2500911988180707\n",
      "train loss: 2.271147355877637\n",
      "=== epoch:  35 , train acc:  0.26 , test acc:  0.2101 ===\n",
      "train loss: 2.259907822089432\n",
      "train loss: 2.2394748267090736\n",
      "train loss: 2.259378261487033\n",
      "=== epoch:  36 , train acc:  0.2633333333333333 , test acc:  0.2112 ===\n",
      "train loss: 2.2417958725604694\n",
      "train loss: 2.2523514119660932\n",
      "train loss: 2.2472869770043604\n",
      "=== epoch:  37 , train acc:  0.2633333333333333 , test acc:  0.2117 ===\n",
      "train loss: 2.2329312436152238\n",
      "train loss: 2.2487038325998507\n",
      "train loss: 2.249330579096829\n",
      "=== epoch:  38 , train acc:  0.2633333333333333 , test acc:  0.2125 ===\n",
      "train loss: 2.231422289707966\n",
      "train loss: 2.254760365850663\n",
      "train loss: 2.220610926714103\n",
      "=== epoch:  39 , train acc:  0.26 , test acc:  0.2152 ===\n",
      "train loss: 2.2377040711389085\n",
      "train loss: 2.2401070377283703\n",
      "train loss: 2.2444599772121014\n",
      "=== epoch:  40 , train acc:  0.26 , test acc:  0.2148 ===\n",
      "train loss: 2.2509325525528876\n",
      "train loss: 2.2451762266852473\n",
      "train loss: 2.2470208920130417\n",
      "=== epoch:  41 , train acc:  0.2633333333333333 , test acc:  0.2201 ===\n",
      "train loss: 2.239393269318359\n",
      "train loss: 2.2413160386250954\n",
      "train loss: 2.2524965126676246\n",
      "=== epoch:  42 , train acc:  0.27 , test acc:  0.2216 ===\n",
      "train loss: 2.2406803470330092\n",
      "train loss: 2.233822308154928\n",
      "train loss: 2.2357936421538795\n",
      "=== epoch:  43 , train acc:  0.26666666666666666 , test acc:  0.2249 ===\n",
      "train loss: 2.221007410391113\n",
      "train loss: 2.2562865173859943\n",
      "train loss: 2.2489030086031465\n",
      "=== epoch:  44 , train acc:  0.2733333333333333 , test acc:  0.2289 ===\n",
      "train loss: 2.2296293128568605\n",
      "train loss: 2.2569252920584635\n",
      "train loss: 2.2402635193366116\n",
      "=== epoch:  45 , train acc:  0.27666666666666667 , test acc:  0.2338 ===\n",
      "train loss: 2.2418543383458536\n",
      "train loss: 2.2328930724253984\n",
      "train loss: 2.2296366133471377\n",
      "=== epoch:  46 , train acc:  0.28 , test acc:  0.2342 ===\n",
      "train loss: 2.2384200052745236\n",
      "train loss: 2.2457296574610175\n",
      "train loss: 2.2246726744937355\n",
      "=== epoch:  47 , train acc:  0.29 , test acc:  0.2364 ===\n",
      "train loss: 2.2363948847175874\n",
      "train loss: 2.2360757602237693\n",
      "train loss: 2.249456776391193\n",
      "=== epoch:  48 , train acc:  0.2966666666666667 , test acc:  0.2414 ===\n",
      "train loss: 2.2145949626838823\n",
      "train loss: 2.2015509019050628\n",
      "train loss: 2.2371601537861587\n",
      "=== epoch:  49 , train acc:  0.29333333333333333 , test acc:  0.2378 ===\n",
      "train loss: 2.2374651222528668\n",
      "train loss: 2.238482283532129\n",
      "train loss: 2.222380116151982\n",
      "=== epoch:  50 , train acc:  0.2966666666666667 , test acc:  0.2419 ===\n",
      "train loss: 2.2016630521854905\n",
      "train loss: 2.208693863532292\n",
      "train loss: 2.2198752191187703\n",
      "=== epoch:  51 , train acc:  0.29333333333333333 , test acc:  0.2409 ===\n",
      "train loss: 2.223763243603681\n",
      "train loss: 2.2181832439694062\n",
      "train loss: 2.193337146683987\n",
      "=== epoch:  52 , train acc:  0.29 , test acc:  0.239 ===\n",
      "train loss: 2.220669077765907\n",
      "train loss: 2.1896470104073718\n",
      "train loss: 2.200505002236636\n",
      "=== epoch:  53 , train acc:  0.2866666666666667 , test acc:  0.2388 ===\n",
      "train loss: 2.197381445948538\n",
      "train loss: 2.2157630689879557\n",
      "train loss: 2.1996489419118963\n",
      "=== epoch:  54 , train acc:  0.27666666666666667 , test acc:  0.234 ===\n",
      "train loss: 2.2133740482705697\n",
      "train loss: 2.2216870067613694\n",
      "train loss: 2.2024805041646505\n",
      "=== epoch:  55 , train acc:  0.2866666666666667 , test acc:  0.2389 ===\n",
      "train loss: 2.2117640839562145\n",
      "train loss: 2.2219593939766185\n",
      "train loss: 2.2208999406116217\n",
      "=== epoch:  56 , train acc:  0.3 , test acc:  0.2429 ===\n",
      "train loss: 2.209925421246552\n",
      "train loss: 2.2266971716486035\n",
      "train loss: 2.201430242643654\n",
      "=== epoch:  57 , train acc:  0.3 , test acc:  0.2417 ===\n",
      "train loss: 2.2161959345435402\n",
      "train loss: 2.251511829295096\n",
      "train loss: 2.244053960446848\n",
      "=== epoch:  58 , train acc:  0.30666666666666664 , test acc:  0.2471 ===\n",
      "train loss: 2.1745925331624925\n",
      "train loss: 2.225686505602768\n",
      "train loss: 2.19114510567688\n",
      "=== epoch:  59 , train acc:  0.3 , test acc:  0.2424 ===\n",
      "train loss: 2.2087265852987112\n",
      "train loss: 2.1977165386558775\n",
      "train loss: 2.172637545012519\n",
      "=== epoch:  60 , train acc:  0.29333333333333333 , test acc:  0.2411 ===\n",
      "train loss: 2.1862316848497056\n",
      "train loss: 2.2057583703467394\n",
      "train loss: 2.1775290618930736\n",
      "=== epoch:  61 , train acc:  0.2833333333333333 , test acc:  0.2358 ===\n",
      "train loss: 2.2000114197639373\n",
      "train loss: 2.1910457032604853\n",
      "train loss: 2.1852510346323526\n",
      "=== epoch:  62 , train acc:  0.2833333333333333 , test acc:  0.2367 ===\n",
      "train loss: 2.1957323879839326\n",
      "train loss: 2.205540598453275\n",
      "train loss: 2.1662186115037487\n",
      "=== epoch:  63 , train acc:  0.28 , test acc:  0.2347 ===\n",
      "train loss: 2.175189650671969\n",
      "train loss: 2.2081130099584816\n",
      "train loss: 2.223456988131974\n",
      "=== epoch:  64 , train acc:  0.29 , test acc:  0.241 ===\n",
      "train loss: 2.205344691338408\n",
      "train loss: 2.199709203921894\n",
      "train loss: 2.2127445766192806\n",
      "=== epoch:  65 , train acc:  0.29333333333333333 , test acc:  0.2442 ===\n",
      "train loss: 2.2002489575783546\n",
      "train loss: 2.209921140511679\n",
      "train loss: 2.193001345829204\n",
      "=== epoch:  66 , train acc:  0.2966666666666667 , test acc:  0.2467 ===\n",
      "train loss: 2.166392616689076\n",
      "train loss: 2.1993180224903623\n",
      "train loss: 2.171697200174206\n",
      "=== epoch:  67 , train acc:  0.3 , test acc:  0.2457 ===\n",
      "train loss: 2.1928832089721415\n",
      "train loss: 2.1536016308991526\n",
      "train loss: 2.190764831538516\n",
      "=== epoch:  68 , train acc:  0.30666666666666664 , test acc:  0.2443 ===\n",
      "train loss: 2.190883501892515\n",
      "train loss: 2.171451591765256\n",
      "train loss: 2.2046476716772685\n",
      "=== epoch:  69 , train acc:  0.29333333333333333 , test acc:  0.2444 ===\n",
      "train loss: 2.181069279845423\n",
      "train loss: 2.1841199121729686\n",
      "train loss: 2.16028622506653\n",
      "=== epoch:  70 , train acc:  0.30666666666666664 , test acc:  0.2494 ===\n",
      "train loss: 2.181214733437014\n",
      "train loss: 2.168762076998708\n",
      "train loss: 2.201842465026307\n",
      "=== epoch:  71 , train acc:  0.30333333333333334 , test acc:  0.2514 ===\n",
      "train loss: 2.170043911613493\n",
      "train loss: 2.2267843897104327\n",
      "train loss: 2.1725858281502326\n",
      "=== epoch:  72 , train acc:  0.31333333333333335 , test acc:  0.2573 ===\n",
      "train loss: 2.184502542972874\n",
      "train loss: 2.1155111328208984\n",
      "train loss: 2.164420044216634\n",
      "=== epoch:  73 , train acc:  0.31333333333333335 , test acc:  0.2545 ===\n",
      "train loss: 2.1782899801043136\n",
      "train loss: 2.1434014296080055\n",
      "train loss: 2.153916841022054\n",
      "=== epoch:  74 , train acc:  0.30666666666666664 , test acc:  0.2512 ===\n",
      "train loss: 2.1818477453406957\n",
      "train loss: 2.1632645360326648\n",
      "train loss: 2.1502867541598705\n",
      "=== epoch:  75 , train acc:  0.30333333333333334 , test acc:  0.2504 ===\n",
      "train loss: 2.1377834656417356\n",
      "train loss: 2.1827512244132543\n",
      "train loss: 2.166055308899743\n",
      "=== epoch:  76 , train acc:  0.29 , test acc:  0.2503 ===\n",
      "train loss: 2.1696416345538494\n",
      "train loss: 2.1851978085152637\n",
      "train loss: 2.14111199835759\n",
      "=== epoch:  77 , train acc:  0.29 , test acc:  0.2503 ===\n",
      "train loss: 2.156978070818836\n",
      "train loss: 2.1302882871325877\n",
      "train loss: 2.135969583721314\n",
      "=== epoch:  78 , train acc:  0.2833333333333333 , test acc:  0.2495 ===\n",
      "train loss: 2.195606539813077\n",
      "train loss: 2.1787063973987513\n",
      "train loss: 2.1226878602718293\n",
      "=== epoch:  79 , train acc:  0.29333333333333333 , test acc:  0.2536 ===\n",
      "train loss: 2.0558598714002096\n",
      "train loss: 2.150571975966735\n",
      "train loss: 2.08964896627771\n",
      "=== epoch:  80 , train acc:  0.29 , test acc:  0.2449 ===\n",
      "train loss: 2.1479777305632313\n",
      "train loss: 2.181989509494284\n",
      "train loss: 2.123423214471363\n",
      "=== epoch:  81 , train acc:  0.29333333333333333 , test acc:  0.2467 ===\n",
      "train loss: 2.1441944628778016\n",
      "train loss: 2.154522566433207\n",
      "train loss: 2.134354302129609\n",
      "=== epoch:  82 , train acc:  0.29 , test acc:  0.2477 ===\n",
      "train loss: 2.072772799817806\n",
      "train loss: 2.1200504773138737\n",
      "train loss: 2.0821937685582705\n",
      "=== epoch:  83 , train acc:  0.29 , test acc:  0.2458 ===\n",
      "train loss: 2.159834075081311\n",
      "train loss: 2.192247160384982\n",
      "train loss: 2.153045154941968\n",
      "=== epoch:  84 , train acc:  0.29333333333333333 , test acc:  0.2506 ===\n",
      "train loss: 2.097053130405024\n",
      "train loss: 2.1958057147336807\n",
      "train loss: 2.1065776419697815\n",
      "=== epoch:  85 , train acc:  0.29333333333333333 , test acc:  0.2518 ===\n",
      "train loss: 2.0852298284682522\n",
      "train loss: 2.0969377599536205\n",
      "train loss: 2.159649574493814\n",
      "=== epoch:  86 , train acc:  0.30333333333333334 , test acc:  0.2526 ===\n",
      "train loss: 2.1564829009826427\n",
      "train loss: 2.147550980228511\n",
      "train loss: 2.1406459319549827\n",
      "=== epoch:  87 , train acc:  0.31 , test acc:  0.2573 ===\n",
      "train loss: 2.1038304499914564\n",
      "train loss: 2.1653264550652045\n",
      "train loss: 2.0514565437406476\n",
      "=== epoch:  88 , train acc:  0.30333333333333334 , test acc:  0.256 ===\n",
      "train loss: 2.1268826695187415\n",
      "train loss: 2.0653019407551207\n",
      "train loss: 2.1116941463190075\n",
      "=== epoch:  89 , train acc:  0.30666666666666664 , test acc:  0.2543 ===\n",
      "train loss: 2.0419186193704726\n",
      "train loss: 2.0914138278921133\n",
      "train loss: 2.1475067378736687\n",
      "=== epoch:  90 , train acc:  0.2966666666666667 , test acc:  0.2551 ===\n",
      "train loss: 2.1394926330848016\n",
      "train loss: 2.1495467144686002\n",
      "train loss: 2.0963677787375117\n",
      "=== epoch:  91 , train acc:  0.30666666666666664 , test acc:  0.2567 ===\n",
      "train loss: 2.1109983436695843\n",
      "train loss: 2.1008288201819525\n",
      "train loss: 2.126595944667602\n",
      "=== epoch:  92 , train acc:  0.31 , test acc:  0.2593 ===\n",
      "train loss: 2.020175857504734\n",
      "train loss: 2.122157357270806\n",
      "train loss: 2.0905051166830355\n",
      "=== epoch:  93 , train acc:  0.30666666666666664 , test acc:  0.2599 ===\n",
      "train loss: 2.0617122352648023\n",
      "train loss: 2.0499859531198084\n",
      "train loss: 2.076744969590209\n",
      "=== epoch:  94 , train acc:  0.31 , test acc:  0.2589 ===\n",
      "train loss: 2.0542980076131387\n",
      "train loss: 2.110825516436116\n",
      "train loss: 2.1567391602551966\n",
      "=== epoch:  95 , train acc:  0.32 , test acc:  0.2643 ===\n",
      "train loss: 2.1275514658323007\n",
      "train loss: 2.0649783291774915\n",
      "train loss: 2.1284605839064716\n",
      "=== epoch:  96 , train acc:  0.33666666666666667 , test acc:  0.267 ===\n",
      "train loss: 2.124448949622897\n",
      "train loss: 2.118440484650732\n",
      "train loss: 2.1058390101463242\n",
      "=== epoch:  97 , train acc:  0.34 , test acc:  0.2689 ===\n",
      "train loss: 2.121185971219545\n",
      "train loss: 2.1200214620703743\n",
      "train loss: 2.1206959428295846\n",
      "=== epoch:  98 , train acc:  0.3566666666666667 , test acc:  0.2757 ===\n",
      "train loss: 2.0703231079352014\n",
      "train loss: 2.0933395713109877\n",
      "train loss: 2.092506787954981\n",
      "=== epoch:  99 , train acc:  0.3466666666666667 , test acc:  0.2759 ===\n",
      "train loss: 2.0196485998766542\n",
      "train loss: 2.045907705885253\n",
      "train loss: 2.094277690201716\n",
      "=== epoch:  100 , train acc:  0.35 , test acc:  0.277 ===\n",
      "train loss: 2.086598128890516\n",
      "train loss: 2.072217041113216\n",
      "train loss: 2.0569385127318616\n",
      "=== epoch:  101 , train acc:  0.35 , test acc:  0.2767 ===\n",
      "train loss: 2.0658466420521826\n",
      "train loss: 2.096972076179774\n",
      "train loss: 2.067635017995421\n",
      "=== epoch:  102 , train acc:  0.35333333333333333 , test acc:  0.2784 ===\n",
      "train loss: 2.0919267798987597\n",
      "train loss: 2.0837907684480785\n",
      "train loss: 1.909822044990145\n",
      "=== epoch:  103 , train acc:  0.3566666666666667 , test acc:  0.2787 ===\n",
      "train loss: 2.098806511975571\n",
      "train loss: 2.0653036065912747\n",
      "train loss: 2.0272872491148646\n",
      "=== epoch:  104 , train acc:  0.36333333333333334 , test acc:  0.2788 ===\n",
      "train loss: 2.1178473478523436\n",
      "train loss: 2.032090533118241\n",
      "train loss: 2.140508658326606\n",
      "=== epoch:  105 , train acc:  0.36 , test acc:  0.2795 ===\n",
      "train loss: 2.057178391123517\n",
      "train loss: 2.069510927151731\n",
      "train loss: 2.0751539770784224\n",
      "=== epoch:  106 , train acc:  0.36666666666666664 , test acc:  0.2869 ===\n",
      "train loss: 2.043655717952282\n",
      "train loss: 2.087051837300402\n",
      "train loss: 2.1100663271207907\n",
      "=== epoch:  107 , train acc:  0.37666666666666665 , test acc:  0.2926 ===\n",
      "train loss: 2.1061373935956937\n",
      "train loss: 2.0629600176608838\n",
      "train loss: 2.0767032167840114\n",
      "=== epoch:  108 , train acc:  0.37666666666666665 , test acc:  0.2961 ===\n",
      "train loss: 2.062290520512519\n",
      "train loss: 2.0592631226908877\n",
      "train loss: 2.0387703719362325\n",
      "=== epoch:  109 , train acc:  0.37333333333333335 , test acc:  0.2949 ===\n",
      "train loss: 2.0717217207962793\n",
      "train loss: 2.098946422824375\n",
      "train loss: 2.040066833544923\n",
      "=== epoch:  110 , train acc:  0.38 , test acc:  0.2986 ===\n",
      "train loss: 2.0261096417906983\n",
      "train loss: 2.1126791858623415\n",
      "train loss: 2.108416326814212\n",
      "=== epoch:  111 , train acc:  0.3933333333333333 , test acc:  0.3036 ===\n",
      "train loss: 1.9911156876354439\n",
      "train loss: 2.0872451549017423\n",
      "train loss: 2.0175665070253883\n",
      "=== epoch:  112 , train acc:  0.3933333333333333 , test acc:  0.3056 ===\n",
      "train loss: 1.9712022354691083\n",
      "train loss: 2.1136865276720784\n",
      "train loss: 2.0418928696911958\n",
      "=== epoch:  113 , train acc:  0.3933333333333333 , test acc:  0.3069 ===\n",
      "train loss: 2.032517689949872\n",
      "train loss: 2.0784348940952153\n",
      "train loss: 1.9208901189551506\n",
      "=== epoch:  114 , train acc:  0.3933333333333333 , test acc:  0.3094 ===\n",
      "train loss: 2.0460444334669963\n",
      "train loss: 2.057679285412437\n",
      "train loss: 2.1094105517029833\n",
      "=== epoch:  115 , train acc:  0.4033333333333333 , test acc:  0.316 ===\n",
      "train loss: 2.0337547049782545\n",
      "train loss: 2.0123427689025917\n",
      "train loss: 2.1164675036739093\n",
      "=== epoch:  116 , train acc:  0.41333333333333333 , test acc:  0.3233 ===\n",
      "train loss: 2.0548915290185272\n",
      "train loss: 2.0370632126134534\n",
      "train loss: 2.0417637352571414\n",
      "=== epoch:  117 , train acc:  0.4066666666666667 , test acc:  0.322 ===\n",
      "train loss: 1.9873708787380366\n",
      "train loss: 1.9470976909763436\n",
      "train loss: 2.1141409635254234\n",
      "=== epoch:  118 , train acc:  0.4 , test acc:  0.3195 ===\n",
      "train loss: 1.9611448473346424\n",
      "train loss: 1.937275242487068\n",
      "train loss: 2.0217654162361014\n",
      "=== epoch:  119 , train acc:  0.4 , test acc:  0.3191 ===\n",
      "train loss: 2.008818316095033\n",
      "train loss: 1.9908551583515584\n",
      "train loss: 2.014116225790645\n",
      "=== epoch:  120 , train acc:  0.4066666666666667 , test acc:  0.3204 ===\n",
      "train loss: 1.9937883151009392\n",
      "train loss: 1.9876111279234647\n",
      "train loss: 1.9281111723688167\n",
      "=== epoch:  121 , train acc:  0.41 , test acc:  0.3216 ===\n",
      "train loss: 1.896470472597541\n",
      "train loss: 2.038789956458384\n",
      "train loss: 1.9852514273322905\n",
      "=== epoch:  122 , train acc:  0.4066666666666667 , test acc:  0.3229 ===\n",
      "train loss: 1.9071694015383995\n",
      "train loss: 1.9058609543561553\n",
      "train loss: 1.9122737595322437\n",
      "=== epoch:  123 , train acc:  0.39666666666666667 , test acc:  0.3192 ===\n",
      "train loss: 1.9898691804604796\n",
      "train loss: 1.984536934902219\n",
      "train loss: 1.9832193053418627\n",
      "=== epoch:  124 , train acc:  0.4066666666666667 , test acc:  0.3259 ===\n",
      "train loss: 2.0405386562461145\n",
      "train loss: 2.0552919414324418\n",
      "train loss: 1.869154562434007\n",
      "=== epoch:  125 , train acc:  0.41333333333333333 , test acc:  0.3319 ===\n",
      "train loss: 1.950915162746963\n",
      "train loss: 2.0559593289502023\n",
      "train loss: 2.009766409651698\n",
      "=== epoch:  126 , train acc:  0.4266666666666667 , test acc:  0.3374 ===\n",
      "train loss: 1.9696274008980066\n",
      "train loss: 1.986669443961158\n",
      "train loss: 2.018967546738622\n",
      "=== epoch:  127 , train acc:  0.43333333333333335 , test acc:  0.339 ===\n",
      "train loss: 1.9374001117575637\n",
      "train loss: 2.020430384519928\n",
      "train loss: 2.000716121154299\n",
      "=== epoch:  128 , train acc:  0.43 , test acc:  0.3412 ===\n",
      "train loss: 1.9743002489966919\n",
      "train loss: 2.0666239708538434\n",
      "train loss: 1.8897729562304684\n",
      "=== epoch:  129 , train acc:  0.43333333333333335 , test acc:  0.3438 ===\n",
      "train loss: 2.013473222896761\n",
      "train loss: 1.9822026901142675\n",
      "train loss: 1.9440717664184606\n",
      "=== epoch:  130 , train acc:  0.42333333333333334 , test acc:  0.3423 ===\n",
      "train loss: 1.998192260162126\n",
      "train loss: 1.9528942739492692\n",
      "train loss: 1.9662415527587132\n",
      "=== epoch:  131 , train acc:  0.43 , test acc:  0.344 ===\n",
      "train loss: 1.9199311103995362\n",
      "train loss: 1.9480717309646522\n",
      "train loss: 1.9567614550772867\n",
      "=== epoch:  132 , train acc:  0.44 , test acc:  0.3464 ===\n",
      "train loss: 1.988839941703477\n",
      "train loss: 1.8978873007996122\n",
      "train loss: 1.9868652949006858\n",
      "=== epoch:  133 , train acc:  0.44333333333333336 , test acc:  0.3475 ===\n",
      "train loss: 1.886435004920075\n",
      "train loss: 1.9597208075269201\n",
      "train loss: 1.9107226157672494\n",
      "=== epoch:  134 , train acc:  0.44333333333333336 , test acc:  0.3489 ===\n",
      "train loss: 1.898595412042697\n",
      "train loss: 2.022742461401642\n",
      "train loss: 2.060965497916325\n",
      "=== epoch:  135 , train acc:  0.45 , test acc:  0.3509 ===\n",
      "train loss: 1.9444275258186232\n",
      "train loss: 2.0651290573186607\n",
      "train loss: 1.9529933086919962\n",
      "=== epoch:  136 , train acc:  0.45666666666666667 , test acc:  0.3554 ===\n",
      "train loss: 1.9706448295187602\n",
      "train loss: 2.0206962967935684\n",
      "train loss: 2.039221466717719\n",
      "=== epoch:  137 , train acc:  0.4666666666666667 , test acc:  0.3611 ===\n",
      "train loss: 1.9057613200115386\n",
      "train loss: 1.9860007643182829\n",
      "train loss: 1.9684401558049671\n",
      "=== epoch:  138 , train acc:  0.46 , test acc:  0.362 ===\n",
      "train loss: 1.9387465733620957\n",
      "train loss: 1.9291955263434875\n",
      "train loss: 1.9501858255101174\n",
      "=== epoch:  139 , train acc:  0.4633333333333333 , test acc:  0.3615 ===\n",
      "train loss: 1.895491233524204\n",
      "train loss: 1.9126759470418682\n",
      "train loss: 2.06688499338393\n",
      "=== epoch:  140 , train acc:  0.4633333333333333 , test acc:  0.365 ===\n",
      "train loss: 1.922313119602719\n",
      "train loss: 1.9156389124667503\n",
      "train loss: 2.011897874947975\n",
      "=== epoch:  141 , train acc:  0.47333333333333333 , test acc:  0.3696 ===\n",
      "train loss: 1.948162416678815\n",
      "train loss: 1.7352378339219046\n",
      "train loss: 1.9833517670644993\n",
      "=== epoch:  142 , train acc:  0.48333333333333334 , test acc:  0.3706 ===\n",
      "train loss: 2.0069439137364746\n",
      "train loss: 1.9838402540875313\n",
      "train loss: 2.0221673602315344\n",
      "=== epoch:  143 , train acc:  0.48 , test acc:  0.3792 ===\n",
      "train loss: 1.9441941019552602\n",
      "train loss: 1.8453330951241937\n",
      "train loss: 1.9492976443781835\n",
      "=== epoch:  144 , train acc:  0.49 , test acc:  0.3792 ===\n",
      "train loss: 1.9556249484047208\n",
      "train loss: 1.9473424859890516\n",
      "train loss: 1.8363151295481976\n",
      "=== epoch:  145 , train acc:  0.49666666666666665 , test acc:  0.3823 ===\n",
      "train loss: 1.8273968432192256\n",
      "train loss: 2.05889509478449\n",
      "train loss: 1.9060037800441207\n",
      "=== epoch:  146 , train acc:  0.49 , test acc:  0.3843 ===\n",
      "train loss: 1.9312824984993044\n",
      "train loss: 1.879484062639237\n",
      "train loss: 1.8674843170356203\n",
      "=== epoch:  147 , train acc:  0.49333333333333335 , test acc:  0.3857 ===\n",
      "train loss: 2.000166469048656\n",
      "train loss: 1.8974236523064443\n",
      "train loss: 1.9577015087453886\n",
      "=== epoch:  148 , train acc:  0.49333333333333335 , test acc:  0.3855 ===\n",
      "train loss: 1.9123603935987865\n",
      "train loss: 1.9141689867581264\n",
      "train loss: 1.9978376267746618\n",
      "=== epoch:  149 , train acc:  0.49333333333333335 , test acc:  0.3853 ===\n",
      "train loss: 1.9432179617107534\n",
      "train loss: 1.9565695789713131\n",
      "train loss: 1.849307787223096\n",
      "=== epoch:  150 , train acc:  0.49 , test acc:  0.3861 ===\n",
      "train loss: 2.0106019375369013\n",
      "train loss: 1.9061249184657654\n",
      "train loss: 1.775767766036324\n",
      "=== epoch:  151 , train acc:  0.49333333333333335 , test acc:  0.3904 ===\n",
      "train loss: 1.8051031915406281\n",
      "train loss: 1.862526443760275\n",
      "train loss: 1.8449207186727747\n",
      "=== epoch:  152 , train acc:  0.49666666666666665 , test acc:  0.3908 ===\n",
      "train loss: 1.7955733554869853\n",
      "train loss: 1.8906282143963404\n",
      "train loss: 1.770968699344175\n",
      "=== epoch:  153 , train acc:  0.49666666666666665 , test acc:  0.3923 ===\n",
      "train loss: 1.9167061852979088\n",
      "train loss: 1.9997767063176115\n",
      "train loss: 1.8363881786471163\n",
      "=== epoch:  154 , train acc:  0.5033333333333333 , test acc:  0.3965 ===\n",
      "train loss: 2.0092462914831115\n",
      "train loss: 1.9107600211276827\n",
      "train loss: 1.8749831806270765\n",
      "=== epoch:  155 , train acc:  0.5133333333333333 , test acc:  0.3969 ===\n",
      "train loss: 1.88479865992189\n",
      "train loss: 1.9140948156837907\n",
      "train loss: 1.9162472792968106\n",
      "=== epoch:  156 , train acc:  0.5133333333333333 , test acc:  0.3995 ===\n",
      "train loss: 1.9739128785598543\n",
      "train loss: 1.8591670459056824\n",
      "train loss: 1.866609337327435\n",
      "=== epoch:  157 , train acc:  0.5133333333333333 , test acc:  0.3991 ===\n",
      "train loss: 1.783041968077491\n",
      "train loss: 1.8877473888702685\n",
      "train loss: 1.9386660792927701\n",
      "=== epoch:  158 , train acc:  0.52 , test acc:  0.4044 ===\n",
      "train loss: 1.871946055987368\n",
      "train loss: 1.8400833891484853\n",
      "train loss: 1.8754530011219215\n",
      "=== epoch:  159 , train acc:  0.52 , test acc:  0.4054 ===\n",
      "train loss: 1.9330173012816314\n",
      "train loss: 1.8403632863835333\n",
      "train loss: 1.948082931956813\n",
      "=== epoch:  160 , train acc:  0.52 , test acc:  0.4099 ===\n",
      "train loss: 1.8196728626261776\n",
      "train loss: 1.879092159343694\n",
      "train loss: 1.9406262071723759\n",
      "=== epoch:  161 , train acc:  0.5233333333333333 , test acc:  0.4117 ===\n",
      "train loss: 1.902811084810477\n",
      "train loss: 1.8198907159937525\n",
      "train loss: 1.8083449609732105\n",
      "=== epoch:  162 , train acc:  0.5233333333333333 , test acc:  0.4111 ===\n",
      "train loss: 1.9383316132015773\n",
      "train loss: 1.7743632369688078\n",
      "train loss: 1.9256092239688458\n",
      "=== epoch:  163 , train acc:  0.5233333333333333 , test acc:  0.4171 ===\n",
      "train loss: 1.709211402272898\n",
      "train loss: 1.8398173057611518\n",
      "train loss: 1.8809370144154054\n",
      "=== epoch:  164 , train acc:  0.52 , test acc:  0.4179 ===\n",
      "train loss: 1.8384098568528342\n",
      "train loss: 1.944609805628029\n",
      "train loss: 1.963775041075012\n",
      "=== epoch:  165 , train acc:  0.5166666666666667 , test acc:  0.4163 ===\n",
      "train loss: 1.7902174091524976\n",
      "train loss: 1.9123298554347727\n",
      "train loss: 1.8568864801423062\n",
      "=== epoch:  166 , train acc:  0.52 , test acc:  0.4201 ===\n",
      "train loss: 1.8549201449780215\n",
      "train loss: 1.7865814579990777\n",
      "train loss: 1.8043846061797983\n",
      "=== epoch:  167 , train acc:  0.52 , test acc:  0.4205 ===\n",
      "train loss: 1.8875228356519416\n",
      "train loss: 1.9179107998906249\n",
      "train loss: 1.8275010570251211\n",
      "=== epoch:  168 , train acc:  0.5333333333333333 , test acc:  0.4237 ===\n",
      "train loss: 1.8386075347727615\n",
      "train loss: 1.8347055314235223\n",
      "train loss: 1.9150344179020187\n",
      "=== epoch:  169 , train acc:  0.5266666666666666 , test acc:  0.4221 ===\n",
      "train loss: 1.7843951613781033\n",
      "train loss: 1.7038682051663057\n",
      "train loss: 1.8500542907790634\n",
      "=== epoch:  170 , train acc:  0.53 , test acc:  0.4205 ===\n",
      "train loss: 1.736451003503928\n",
      "train loss: 1.806740559860742\n",
      "train loss: 1.7951300628507392\n",
      "=== epoch:  171 , train acc:  0.5366666666666666 , test acc:  0.4232 ===\n",
      "train loss: 1.850882025951774\n",
      "train loss: 1.9236811832189449\n",
      "train loss: 1.8101962824727549\n",
      "=== epoch:  172 , train acc:  0.53 , test acc:  0.4247 ===\n",
      "train loss: 1.652941849110728\n",
      "train loss: 1.8632365201668946\n",
      "train loss: 1.8661593658002038\n",
      "=== epoch:  173 , train acc:  0.54 , test acc:  0.4285 ===\n",
      "train loss: 1.8209389553178696\n",
      "train loss: 1.8016623049111107\n",
      "train loss: 1.8327216634390606\n",
      "=== epoch:  174 , train acc:  0.53 , test acc:  0.4294 ===\n",
      "train loss: 1.7960758508777568\n",
      "train loss: 1.7933942178998998\n",
      "train loss: 1.6779948478183164\n",
      "=== epoch:  175 , train acc:  0.5366666666666666 , test acc:  0.4279 ===\n",
      "train loss: 1.8222917920956236\n",
      "train loss: 1.900213109635454\n",
      "train loss: 1.7105495112133033\n",
      "=== epoch:  176 , train acc:  0.5466666666666666 , test acc:  0.4297 ===\n",
      "train loss: 1.8512961488732416\n",
      "train loss: 1.836781162606086\n",
      "train loss: 1.78654567717702\n",
      "=== epoch:  177 , train acc:  0.5333333333333333 , test acc:  0.4274 ===\n",
      "train loss: 1.7569149600408251\n",
      "train loss: 1.781742755467566\n",
      "train loss: 1.8828770209274586\n",
      "=== epoch:  178 , train acc:  0.5466666666666666 , test acc:  0.4325 ===\n",
      "train loss: 1.764315848428119\n",
      "train loss: 1.7578984204157937\n",
      "train loss: 1.7692044143241312\n",
      "=== epoch:  179 , train acc:  0.5433333333333333 , test acc:  0.4339 ===\n",
      "train loss: 1.8447691669924373\n",
      "train loss: 1.8528094375558959\n",
      "train loss: 1.7628355628278578\n",
      "=== epoch:  180 , train acc:  0.5466666666666666 , test acc:  0.4362 ===\n",
      "train loss: 1.7891008917755322\n",
      "train loss: 1.677610256990616\n",
      "train loss: 1.82269302400625\n",
      "=== epoch:  181 , train acc:  0.55 , test acc:  0.4407 ===\n",
      "train loss: 1.6680457779973137\n",
      "train loss: 1.7816122185010912\n",
      "train loss: 1.7861360580424113\n",
      "=== epoch:  182 , train acc:  0.5533333333333333 , test acc:  0.4403 ===\n",
      "train loss: 1.7666766079975065\n",
      "train loss: 1.6430969710294159\n",
      "train loss: 1.6777229169843932\n",
      "=== epoch:  183 , train acc:  0.5466666666666666 , test acc:  0.4415 ===\n",
      "train loss: 1.7755824378401774\n",
      "train loss: 1.8020877096779453\n",
      "train loss: 1.7584571882528648\n",
      "=== epoch:  184 , train acc:  0.5533333333333333 , test acc:  0.4434 ===\n",
      "train loss: 1.7903093094950941\n",
      "train loss: 1.7389489941841285\n",
      "train loss: 1.8538306237594608\n",
      "=== epoch:  185 , train acc:  0.55 , test acc:  0.4464 ===\n",
      "train loss: 1.7683292916812006\n",
      "train loss: 1.742026377810987\n",
      "train loss: 1.7075821671953701\n",
      "=== epoch:  186 , train acc:  0.5566666666666666 , test acc:  0.4474 ===\n",
      "train loss: 1.7339465026375926\n",
      "train loss: 1.729252861677915\n",
      "train loss: 1.7634512212195417\n",
      "=== epoch:  187 , train acc:  0.5633333333333334 , test acc:  0.4483 ===\n",
      "train loss: 1.7822139242444635\n",
      "train loss: 1.7566362872629027\n",
      "train loss: 1.699117581143463\n",
      "=== epoch:  188 , train acc:  0.56 , test acc:  0.4507 ===\n",
      "train loss: 1.7102277824147447\n",
      "train loss: 1.7362003339070062\n",
      "train loss: 1.7803231935215433\n",
      "=== epoch:  189 , train acc:  0.5666666666666667 , test acc:  0.4522 ===\n",
      "train loss: 1.8685853512231108\n",
      "train loss: 1.7172297519564583\n",
      "train loss: 1.7849903240825693\n",
      "=== epoch:  190 , train acc:  0.5833333333333334 , test acc:  0.4557 ===\n",
      "train loss: 1.7301766359931496\n",
      "train loss: 1.683253683196698\n",
      "train loss: 1.7619526147779003\n",
      "=== epoch:  191 , train acc:  0.5933333333333334 , test acc:  0.4568 ===\n",
      "train loss: 1.7317871709011543\n",
      "train loss: 1.8317871803694288\n",
      "train loss: 1.6476322009727844\n",
      "=== epoch:  192 , train acc:  0.5933333333333334 , test acc:  0.4579 ===\n",
      "train loss: 1.7411353086509558\n",
      "train loss: 1.858277950313891\n",
      "train loss: 1.7006581809462658\n",
      "=== epoch:  193 , train acc:  0.6 , test acc:  0.4597 ===\n",
      "train loss: 1.683495454501033\n",
      "train loss: 1.7092924843250727\n",
      "train loss: 1.7239908562989417\n",
      "=== epoch:  194 , train acc:  0.59 , test acc:  0.4571 ===\n",
      "train loss: 1.769143831033146\n",
      "train loss: 1.667734927081415\n",
      "train loss: 1.854830930223644\n",
      "=== epoch:  195 , train acc:  0.5966666666666667 , test acc:  0.4623 ===\n",
      "train loss: 1.6413387098479446\n",
      "train loss: 1.735033633877809\n",
      "train loss: 1.7140906666422981\n",
      "=== epoch:  196 , train acc:  0.6 , test acc:  0.4587 ===\n",
      "train loss: 1.5931944197893504\n",
      "train loss: 1.7445575114472955\n",
      "train loss: 1.6864408752692188\n",
      "=== epoch:  197 , train acc:  0.5966666666666667 , test acc:  0.4565 ===\n",
      "train loss: 1.7294411436907677\n",
      "train loss: 1.6060228354030042\n",
      "train loss: 1.7250182912236756\n",
      "=== epoch:  198 , train acc:  0.5966666666666667 , test acc:  0.4567 ===\n",
      "train loss: 1.6950333331111187\n",
      "train loss: 1.7244757149998255\n",
      "train loss: 1.7612510440893572\n",
      "=== epoch:  199 , train acc:  0.6 , test acc:  0.4598 ===\n",
      "train loss: 1.7025564580041137\n",
      "train loss: 1.5989447663499632\n",
      "train loss: 1.6607576431437046\n",
      "=== epoch:  200 , train acc:  0.5933333333333334 , test acc:  0.4602 ===\n",
      "train loss: 1.5397639530161167\n",
      "train loss: 1.582774888200189\n",
      "train loss: 1.7565292841860543\n",
      "=== epoch:  201 , train acc:  0.5966666666666667 , test acc:  0.46 ===\n",
      "train loss: 1.5348316540836646\n",
      "train loss: 1.6330426052329678\n",
      "train loss: 1.7725642929603294\n",
      "=== epoch:  202 , train acc:  0.6033333333333334 , test acc:  0.4641 ===\n",
      "train loss: 1.524137705470433\n",
      "train loss: 1.5737434672418746\n",
      "train loss: 1.670087779490309\n",
      "=== epoch:  203 , train acc:  0.6066666666666667 , test acc:  0.4653 ===\n",
      "train loss: 1.6774843470940453\n",
      "train loss: 1.559763418115475\n",
      "train loss: 1.622119199447394\n",
      "=== epoch:  204 , train acc:  0.6066666666666667 , test acc:  0.4639 ===\n",
      "train loss: 1.5748045082750008\n",
      "train loss: 1.6632884594917072\n",
      "train loss: 1.6329059649096356\n",
      "=== epoch:  205 , train acc:  0.6033333333333334 , test acc:  0.469 ===\n",
      "train loss: 1.6690378853376708\n",
      "train loss: 1.694341905897004\n",
      "train loss: 1.601080545624306\n",
      "=== epoch:  206 , train acc:  0.6133333333333333 , test acc:  0.4701 ===\n",
      "train loss: 1.6846948821638443\n",
      "train loss: 1.7530603651768148\n",
      "train loss: 1.8119965639036966\n",
      "=== epoch:  207 , train acc:  0.6166666666666667 , test acc:  0.4726 ===\n",
      "train loss: 1.5917410433133576\n",
      "train loss: 1.6415737820694634\n",
      "train loss: 1.7069717247963132\n",
      "=== epoch:  208 , train acc:  0.62 , test acc:  0.476 ===\n",
      "train loss: 1.6164293003132255\n",
      "train loss: 1.685730660920221\n",
      "train loss: 1.641495858724508\n",
      "=== epoch:  209 , train acc:  0.61 , test acc:  0.4738 ===\n",
      "train loss: 1.5361681816193355\n",
      "train loss: 1.6202168170935485\n",
      "train loss: 1.6902974992848876\n",
      "=== epoch:  210 , train acc:  0.61 , test acc:  0.4761 ===\n",
      "train loss: 1.5860799335687272\n",
      "train loss: 1.7055410133638285\n",
      "train loss: 1.633042938277255\n",
      "=== epoch:  211 , train acc:  0.6233333333333333 , test acc:  0.4811 ===\n",
      "train loss: 1.7139923615936261\n",
      "train loss: 1.6262428369118087\n",
      "train loss: 1.686244114097249\n",
      "=== epoch:  212 , train acc:  0.6133333333333333 , test acc:  0.4804 ===\n",
      "train loss: 1.5585839388908795\n",
      "train loss: 1.7197592243282032\n",
      "train loss: 1.5985967764654987\n",
      "=== epoch:  213 , train acc:  0.61 , test acc:  0.4849 ===\n",
      "train loss: 1.635266258554313\n",
      "train loss: 1.6425435553528527\n",
      "train loss: 1.5152694778916986\n",
      "=== epoch:  214 , train acc:  0.6066666666666667 , test acc:  0.4871 ===\n",
      "train loss: 1.6684286104730743\n",
      "train loss: 1.5752374100027648\n",
      "train loss: 1.7846912753865647\n",
      "=== epoch:  215 , train acc:  0.62 , test acc:  0.4868 ===\n",
      "train loss: 1.6515883818019699\n",
      "train loss: 1.5610135669019516\n",
      "train loss: 1.6159044596945813\n",
      "=== epoch:  216 , train acc:  0.6233333333333333 , test acc:  0.4846 ===\n",
      "train loss: 1.5995074772208224\n",
      "train loss: 1.6495804480869218\n",
      "train loss: 1.6120219581560988\n",
      "=== epoch:  217 , train acc:  0.6266666666666667 , test acc:  0.4925 ===\n",
      "train loss: 1.626619094717897\n",
      "train loss: 1.4998066003281836\n",
      "train loss: 1.572206342355726\n",
      "=== epoch:  218 , train acc:  0.6333333333333333 , test acc:  0.4927 ===\n",
      "train loss: 1.6146095205345907\n",
      "train loss: 1.4748360454728169\n",
      "train loss: 1.6104532883759624\n",
      "=== epoch:  219 , train acc:  0.6333333333333333 , test acc:  0.4926 ===\n",
      "train loss: 1.66180223883767\n",
      "train loss: 1.6138875502976047\n",
      "train loss: 1.639221253650505\n",
      "=== epoch:  220 , train acc:  0.6233333333333333 , test acc:  0.4977 ===\n",
      "train loss: 1.6264048199761054\n",
      "train loss: 1.542033758383598\n",
      "train loss: 1.5996007015161857\n",
      "=== epoch:  221 , train acc:  0.6233333333333333 , test acc:  0.4962 ===\n",
      "train loss: 1.6017450169774592\n",
      "train loss: 1.6046946243658098\n",
      "train loss: 1.7114009202573928\n",
      "=== epoch:  222 , train acc:  0.6333333333333333 , test acc:  0.5021 ===\n",
      "train loss: 1.6174681413940555\n",
      "train loss: 1.5368929984076811\n",
      "train loss: 1.6540423009476435\n",
      "=== epoch:  223 , train acc:  0.6333333333333333 , test acc:  0.5024 ===\n",
      "train loss: 1.726937831413886\n",
      "train loss: 1.5266940228899506\n",
      "train loss: 1.505473418076294\n",
      "=== epoch:  224 , train acc:  0.65 , test acc:  0.5067 ===\n",
      "train loss: 1.5230270482166055\n",
      "train loss: 1.493452100952486\n",
      "train loss: 1.500180861685946\n",
      "=== epoch:  225 , train acc:  0.6266666666666667 , test acc:  0.5065 ===\n",
      "train loss: 1.6357516123020381\n",
      "train loss: 1.546991254401635\n",
      "train loss: 1.4381254322123778\n",
      "=== epoch:  226 , train acc:  0.6533333333333333 , test acc:  0.5128 ===\n",
      "train loss: 1.4962843109223667\n",
      "train loss: 1.6715614593742234\n",
      "train loss: 1.5690992150617922\n",
      "=== epoch:  227 , train acc:  0.6533333333333333 , test acc:  0.5161 ===\n",
      "train loss: 1.606167668378898\n",
      "train loss: 1.5291672740682092\n",
      "train loss: 1.5183954485628763\n",
      "=== epoch:  228 , train acc:  0.6433333333333333 , test acc:  0.511 ===\n",
      "train loss: 1.562355836075607\n",
      "train loss: 1.5233946425322065\n",
      "train loss: 1.668151134001435\n",
      "=== epoch:  229 , train acc:  0.6366666666666667 , test acc:  0.5119 ===\n",
      "train loss: 1.5611989569154208\n",
      "train loss: 1.5342677215833753\n",
      "train loss: 1.671567311007342\n",
      "=== epoch:  230 , train acc:  0.64 , test acc:  0.5125 ===\n",
      "train loss: 1.6549538305682114\n",
      "train loss: 1.6680219715762348\n",
      "train loss: 1.4492264483697752\n",
      "=== epoch:  231 , train acc:  0.6433333333333333 , test acc:  0.513 ===\n",
      "train loss: 1.4061674713880334\n",
      "train loss: 1.5620746402273784\n",
      "train loss: 1.6065016547805908\n",
      "=== epoch:  232 , train acc:  0.6433333333333333 , test acc:  0.5138 ===\n",
      "train loss: 1.5299119347542307\n",
      "train loss: 1.5918750309196046\n",
      "train loss: 1.573091123412806\n",
      "=== epoch:  233 , train acc:  0.65 , test acc:  0.514 ===\n",
      "train loss: 1.5097074008501148\n",
      "train loss: 1.5121721106017532\n",
      "train loss: 1.4995607276443244\n",
      "=== epoch:  234 , train acc:  0.6533333333333333 , test acc:  0.5143 ===\n",
      "train loss: 1.5152442554024534\n",
      "train loss: 1.621662455020615\n",
      "train loss: 1.5118523864807472\n",
      "=== epoch:  235 , train acc:  0.6533333333333333 , test acc:  0.5141 ===\n",
      "train loss: 1.5614361801303045\n",
      "train loss: 1.5303184655600632\n",
      "train loss: 1.4380900072703335\n",
      "=== epoch:  236 , train acc:  0.6433333333333333 , test acc:  0.5124 ===\n",
      "train loss: 1.5903469615205221\n",
      "train loss: 1.4427773840886227\n",
      "train loss: 1.4863886360916698\n",
      "=== epoch:  237 , train acc:  0.65 , test acc:  0.5132 ===\n",
      "train loss: 1.527747323197727\n",
      "train loss: 1.5553390565672105\n",
      "train loss: 1.4723877982419467\n",
      "=== epoch:  238 , train acc:  0.64 , test acc:  0.5142 ===\n",
      "train loss: 1.4841810673755782\n",
      "train loss: 1.4392006803192365\n",
      "train loss: 1.5010715014249778\n",
      "=== epoch:  239 , train acc:  0.6366666666666667 , test acc:  0.5151 ===\n",
      "train loss: 1.5226039997998135\n",
      "train loss: 1.412067042019396\n",
      "train loss: 1.3818195350418836\n",
      "=== epoch:  240 , train acc:  0.65 , test acc:  0.5177 ===\n",
      "train loss: 1.3982904375604952\n",
      "train loss: 1.5485428907934513\n",
      "train loss: 1.4434355936011716\n",
      "=== epoch:  241 , train acc:  0.6466666666666666 , test acc:  0.5138 ===\n",
      "train loss: 1.5771338763894684\n",
      "train loss: 1.3368440816276603\n",
      "train loss: 1.28270743388205\n",
      "=== epoch:  242 , train acc:  0.65 , test acc:  0.5148 ===\n",
      "train loss: 1.5075745561321094\n",
      "train loss: 1.4777614945150757\n",
      "train loss: 1.512837967322577\n",
      "=== epoch:  243 , train acc:  0.6466666666666666 , test acc:  0.5167 ===\n",
      "train loss: 1.4051798466186074\n",
      "train loss: 1.403605047856304\n",
      "train loss: 1.4174539965121802\n",
      "=== epoch:  244 , train acc:  0.65 , test acc:  0.5147 ===\n",
      "train loss: 1.4351489919411253\n",
      "train loss: 1.3911339077073899\n",
      "train loss: 1.3662901269603063\n",
      "=== epoch:  245 , train acc:  0.65 , test acc:  0.5154 ===\n",
      "train loss: 1.4628723936792616\n",
      "train loss: 1.5258437537735987\n",
      "train loss: 1.4552542893149722\n",
      "=== epoch:  246 , train acc:  0.6533333333333333 , test acc:  0.5189 ===\n",
      "train loss: 1.443367389212424\n",
      "train loss: 1.4098599358905988\n",
      "train loss: 1.472601798009606\n",
      "=== epoch:  247 , train acc:  0.65 , test acc:  0.5208 ===\n",
      "train loss: 1.3548127733660784\n",
      "train loss: 1.3098188198300311\n",
      "train loss: 1.325775879341524\n",
      "=== epoch:  248 , train acc:  0.6566666666666666 , test acc:  0.5206 ===\n",
      "train loss: 1.4211225443349371\n",
      "train loss: 1.3566444086323841\n",
      "train loss: 1.501597331568789\n",
      "=== epoch:  249 , train acc:  0.66 , test acc:  0.5253 ===\n",
      "train loss: 1.3636898841171528\n",
      "train loss: 1.2326025272138459\n",
      "train loss: 1.4209965873704682\n",
      "=== epoch:  250 , train acc:  0.66 , test acc:  0.5253 ===\n",
      "train loss: 1.3489567097565314\n",
      "train loss: 1.4679310564064625\n",
      "train loss: 1.4168464991145653\n",
      "=== epoch:  251 , train acc:  0.6533333333333333 , test acc:  0.524 ===\n",
      "train loss: 1.2931770676301557\n",
      "train loss: 1.3957311310712026\n",
      "train loss: 1.335498766366713\n",
      "=== epoch:  252 , train acc:  0.65 , test acc:  0.5225 ===\n",
      "train loss: 1.4498299720592152\n",
      "train loss: 1.4303968993111442\n",
      "train loss: 1.5382228247213212\n",
      "=== epoch:  253 , train acc:  0.6566666666666666 , test acc:  0.5279 ===\n",
      "train loss: 1.4840976097379603\n",
      "train loss: 1.5002705619294778\n",
      "train loss: 1.355918976006928\n",
      "=== epoch:  254 , train acc:  0.65 , test acc:  0.527 ===\n",
      "train loss: 1.4733521225551969\n",
      "train loss: 1.5184095498526633\n",
      "train loss: 1.3455286117623368\n",
      "=== epoch:  255 , train acc:  0.66 , test acc:  0.5283 ===\n",
      "train loss: 1.5232710363095388\n",
      "train loss: 1.3622976897759533\n",
      "train loss: 1.4456357505373925\n",
      "=== epoch:  256 , train acc:  0.67 , test acc:  0.5326 ===\n",
      "train loss: 1.3476629638838478\n",
      "train loss: 1.301353602231777\n",
      "train loss: 1.325831566346547\n",
      "=== epoch:  257 , train acc:  0.6633333333333333 , test acc:  0.5327 ===\n",
      "train loss: 1.3350148455760609\n",
      "train loss: 1.2589164232902699\n",
      "train loss: 1.3083737221097866\n",
      "=== epoch:  258 , train acc:  0.6666666666666666 , test acc:  0.5335 ===\n",
      "train loss: 1.3440559659836817\n",
      "train loss: 1.338933440535784\n",
      "train loss: 1.2817902546875382\n",
      "=== epoch:  259 , train acc:  0.6633333333333333 , test acc:  0.5277 ===\n",
      "train loss: 1.2696519192909983\n",
      "train loss: 1.2323790409690547\n",
      "train loss: 1.4228402521574046\n",
      "=== epoch:  260 , train acc:  0.67 , test acc:  0.5309 ===\n",
      "train loss: 1.4291632535459504\n",
      "train loss: 1.3079308869989024\n",
      "train loss: 1.3486928166754095\n",
      "=== epoch:  261 , train acc:  0.6666666666666666 , test acc:  0.5297 ===\n",
      "train loss: 1.3477822888399604\n",
      "train loss: 1.0760586916618953\n",
      "train loss: 1.3450349393020529\n",
      "=== epoch:  262 , train acc:  0.6633333333333333 , test acc:  0.5332 ===\n",
      "train loss: 1.370164514115011\n",
      "train loss: 1.2730332650181413\n",
      "train loss: 1.2606070132758722\n",
      "=== epoch:  263 , train acc:  0.6666666666666666 , test acc:  0.5353 ===\n",
      "train loss: 1.1834300022871878\n",
      "train loss: 1.4133464287867494\n",
      "train loss: 1.352170530914647\n",
      "=== epoch:  264 , train acc:  0.66 , test acc:  0.5339 ===\n",
      "train loss: 1.1868395632499757\n",
      "train loss: 1.3340037541982575\n",
      "train loss: 1.264412570800709\n",
      "=== epoch:  265 , train acc:  0.6766666666666666 , test acc:  0.5431 ===\n",
      "train loss: 1.220630898236029\n",
      "train loss: 1.4628529556498748\n",
      "train loss: 1.3446053870548018\n",
      "=== epoch:  266 , train acc:  0.6833333333333333 , test acc:  0.5496 ===\n",
      "train loss: 1.3099982324470993\n",
      "train loss: 1.2635706287159403\n",
      "train loss: 1.2644786317134027\n",
      "=== epoch:  267 , train acc:  0.6833333333333333 , test acc:  0.5466 ===\n",
      "train loss: 1.414109594246666\n",
      "train loss: 1.3624118580056674\n",
      "train loss: 1.2882583662419023\n",
      "=== epoch:  268 , train acc:  0.7133333333333334 , test acc:  0.5583 ===\n",
      "train loss: 1.2068320543019189\n",
      "train loss: 1.3459239617201584\n",
      "train loss: 1.1921322115080755\n",
      "=== epoch:  269 , train acc:  0.71 , test acc:  0.5597 ===\n",
      "train loss: 1.2648332257924284\n",
      "train loss: 1.3917141070746015\n",
      "train loss: 1.1444372757887886\n",
      "=== epoch:  270 , train acc:  0.7133333333333334 , test acc:  0.5593 ===\n",
      "train loss: 1.3197435416617838\n",
      "train loss: 1.289603495185241\n",
      "train loss: 1.3938925164988711\n",
      "=== epoch:  271 , train acc:  0.7066666666666667 , test acc:  0.5574 ===\n",
      "train loss: 1.2670425416472617\n",
      "train loss: 1.1496314202097986\n",
      "train loss: 1.3704953533057809\n",
      "=== epoch:  272 , train acc:  0.71 , test acc:  0.56 ===\n",
      "train loss: 1.1994615481189583\n",
      "train loss: 1.1421581471668072\n",
      "train loss: 1.3965233040823213\n",
      "=== epoch:  273 , train acc:  0.71 , test acc:  0.5628 ===\n",
      "train loss: 1.191110535748158\n",
      "train loss: 1.3759644709995988\n",
      "train loss: 1.236807436357798\n",
      "=== epoch:  274 , train acc:  0.7066666666666667 , test acc:  0.5656 ===\n",
      "train loss: 1.27682892297069\n",
      "train loss: 1.3719479190272292\n",
      "train loss: 1.338086714234805\n",
      "=== epoch:  275 , train acc:  0.7166666666666667 , test acc:  0.566 ===\n",
      "train loss: 1.228451387329622\n",
      "train loss: 1.2112634767373165\n",
      "train loss: 1.2838862718685744\n",
      "=== epoch:  276 , train acc:  0.72 , test acc:  0.5677 ===\n",
      "train loss: 1.3546474429331767\n",
      "train loss: 1.2004257155218172\n",
      "train loss: 1.2428740017610815\n",
      "=== epoch:  277 , train acc:  0.73 , test acc:  0.5702 ===\n",
      "train loss: 1.248950590535637\n",
      "train loss: 1.1822920124238137\n",
      "train loss: 1.2999783206700926\n",
      "=== epoch:  278 , train acc:  0.72 , test acc:  0.5681 ===\n",
      "train loss: 1.402876587633247\n",
      "train loss: 1.2624005348064307\n",
      "train loss: 1.260793330258651\n",
      "=== epoch:  279 , train acc:  0.7233333333333334 , test acc:  0.5717 ===\n",
      "train loss: 1.3177434999964803\n",
      "train loss: 1.3641533487880984\n",
      "train loss: 1.1888667698679245\n",
      "=== epoch:  280 , train acc:  0.7166666666666667 , test acc:  0.5725 ===\n",
      "train loss: 1.068481268776153\n",
      "train loss: 1.1189899386281261\n",
      "train loss: 1.2875372292009295\n",
      "=== epoch:  281 , train acc:  0.7233333333333334 , test acc:  0.5757 ===\n",
      "train loss: 1.2556149716378093\n",
      "train loss: 1.1531120085827269\n",
      "train loss: 1.1925754609507477\n",
      "=== epoch:  282 , train acc:  0.7133333333333334 , test acc:  0.5742 ===\n",
      "train loss: 1.3337728595319902\n",
      "train loss: 1.1784033129186635\n",
      "train loss: 1.209454393719751\n",
      "=== epoch:  283 , train acc:  0.72 , test acc:  0.5765 ===\n",
      "train loss: 1.2613256137433735\n",
      "train loss: 1.1794722867308176\n",
      "train loss: 1.1496233288440727\n",
      "=== epoch:  284 , train acc:  0.7166666666666667 , test acc:  0.5724 ===\n",
      "train loss: 1.2339430208791442\n",
      "train loss: 1.2238931048731703\n",
      "train loss: 1.045390892887892\n",
      "=== epoch:  285 , train acc:  0.71 , test acc:  0.5694 ===\n",
      "train loss: 1.265765754415363\n",
      "train loss: 1.3409771964279904\n",
      "train loss: 1.172991105129828\n",
      "=== epoch:  286 , train acc:  0.7133333333333334 , test acc:  0.5703 ===\n",
      "train loss: 1.2296503653496083\n",
      "train loss: 1.281916898403406\n",
      "train loss: 1.1657098307395948\n",
      "=== epoch:  287 , train acc:  0.72 , test acc:  0.5767 ===\n",
      "train loss: 1.1889607010145964\n",
      "train loss: 1.172680624842875\n",
      "train loss: 1.1507598247185782\n",
      "=== epoch:  288 , train acc:  0.7266666666666667 , test acc:  0.5782 ===\n",
      "train loss: 1.1071088587116105\n",
      "train loss: 1.2696202511459438\n",
      "train loss: 1.1052541674380791\n",
      "=== epoch:  289 , train acc:  0.7166666666666667 , test acc:  0.5732 ===\n",
      "train loss: 1.312179649010165\n",
      "train loss: 1.114527389439834\n",
      "train loss: 1.1901939601262996\n",
      "=== epoch:  290 , train acc:  0.7166666666666667 , test acc:  0.5761 ===\n",
      "train loss: 1.1722459850194589\n",
      "train loss: 1.1171856263287383\n",
      "train loss: 1.0665154195080995\n",
      "=== epoch:  291 , train acc:  0.7133333333333334 , test acc:  0.5768 ===\n",
      "train loss: 1.0386883251349306\n",
      "train loss: 1.1763297787351037\n",
      "train loss: 1.115317951479868\n",
      "=== epoch:  292 , train acc:  0.7233333333333334 , test acc:  0.5779 ===\n",
      "train loss: 1.1253146645482202\n",
      "train loss: 1.338424134026815\n",
      "train loss: 1.1917494759845892\n",
      "=== epoch:  293 , train acc:  0.7166666666666667 , test acc:  0.578 ===\n",
      "train loss: 1.1299476553087562\n",
      "train loss: 1.2261286026418767\n",
      "train loss: 1.2646188124741644\n",
      "=== epoch:  294 , train acc:  0.73 , test acc:  0.5804 ===\n",
      "train loss: 1.0577817753366086\n",
      "train loss: 1.2245215554917726\n",
      "train loss: 1.2205902779861557\n",
      "=== epoch:  295 , train acc:  0.72 , test acc:  0.5814 ===\n",
      "train loss: 1.1380885239690355\n",
      "train loss: 1.231522708987267\n",
      "train loss: 1.2129746013456977\n",
      "=== epoch:  296 , train acc:  0.72 , test acc:  0.582 ===\n",
      "train loss: 1.156500902846759\n",
      "train loss: 1.2097804312725713\n",
      "train loss: 1.1706139960126625\n",
      "=== epoch:  297 , train acc:  0.7266666666666667 , test acc:  0.5833 ===\n",
      "train loss: 1.1080537319938222\n",
      "train loss: 1.0897516964285792\n",
      "train loss: 0.9660309261006613\n",
      "=== epoch:  298 , train acc:  0.72 , test acc:  0.587 ===\n",
      "train loss: 1.0724811186729384\n",
      "train loss: 1.1069305352190002\n",
      "train loss: 1.0892410778104797\n",
      "=== epoch:  299 , train acc:  0.73 , test acc:  0.5874 ===\n",
      "train loss: 1.1371347705013897\n",
      "train loss: 1.0642130565968873\n",
      "train loss: 1.2600104507369791\n",
      "=== epoch:  300 , train acc:  0.72 , test acc:  0.5844 ===\n",
      "train loss: 1.20707087500147\n",
      "train loss: 1.0969938679312226\n",
      "train loss: 1.1186556477601561\n",
      "=== epoch:  301 , train acc:  0.73 , test acc:  0.59 ===\n",
      "train loss: 1.0713920638346015\n",
      "train loss: 1.037910754434659\n",
      "========== Final Test Accuracy ================\n",
      "test acc: 0.5855\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 640x480 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAG2CAYAAACDLKdOAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABX30lEQVR4nO3dd3hUdb7H8fdk0glJgJACBBIEkdBbMGKnqsuKFbGA2FYUV0FdwAKCd8G+uKKyriK6KqCuHUURBBUiPdJ7KEIKNZW0mXP/mM3gmDZJJpnJ5PN6njw3c+aU75wbnM+eXzMZhmEgIiIi4iV83F2AiIiIiCsp3IiIiIhXUbgRERERr6JwIyIiIl5F4UZERES8isKNiIiIeBWFGxEREfEqCjciIiLiVRRuRERExKso3IiIiIhXcWu4+fHHHxk+fDitWrXCZDLx2WefVXnMihUr6N27NwEBAXTo0IH58+fXeZ0iIiLScLg13OTl5dGjRw9effVVp/ZPTU3lqquu4rLLLiMlJYWHHnqIu+66i2+//baOKxUREZGGwuQpC2eaTCY+/fRTRowYUeE+kyZNYvHixWzdutW+7aabbuL06dMsWbKkHqoUERERT+fr7gKqIzk5mUGDBjlsGzp0KA899FCFxxQWFlJYWGh/bbVaOXnyJC1atMBkMtVVqSIiIuJChmGQk5NDq1at8PGpvOGpQYWb9PR0oqKiHLZFRUWRnZ3NmTNnCAoKKnPMrFmzmD59en2VKCIiInXo8OHDtGnTptJ9GlS4qYkpU6YwceJE++usrCzatm3L4cOHCQ0NdWNlIiIi4qzs7GxiY2Np2rRplfs2qHATHR1NRkaGw7aMjAxCQ0PLfWoDEBAQQEBAQJntoaGhCjciIiINjDNdShrUPDdJSUksW7bMYdvSpUtJSkpyU0UiIiLiadwabnJzc0lJSSElJQWwDfVOSUnh0KFDgK1JafTo0fb97733Xvbv38/f/vY3du7cyWuvvcaHH37IhAkT3FG+iIiIeCC3hpv169fTq1cvevXqBcDEiRPp1asXU6dOBSAtLc0edADi4+NZvHgxS5cupUePHrz44ou8+eabDB061C31i4iIiOfxmHlu6kt2djZhYWFkZWWpz42IiEgDUZ3v7wbV50ZERESkKgo3IiIi4lUUbkRERMSrKNyIiIiIV1G4EREREa+icCMiIiJeReFGREREvIrCjYiIiHgVhRsRERHxKgo3IiIi4lUUbkRERMSrKNyIiIiIV1G4EREREa+icCMiIiJeReFGREREvIrCjYiIiHgVhRsRERHxKgo3IiIi4lUUbkRERMSrKNyIiIiIV1G4EREREa+icCMiIiJeReFGREREvIrCjYiIiHgVhRsRERHxKgo3IiIi4lUUbkRERMSrKNyIiIiIV1G4EREREa+icCMiIiJeReFGREREvIrCjYiIiHgVhRsRERHxKgo3IiIi4lUUbkRERMSrKNyIiIiIV1G4EREREa+icCMiIiJeReFGREREvIrCjYiIiHgVhRsRERHxKgo3IiIi4lUUbkRERMSrKNyIiIiIV1G4EREREa+icCMiIiJeReFGREREvIrCjYiIiHgVhRsRERHxKgo3IiIi4lUUbkRERMSrKNyIiIiIV1G4EREREa+icCMiIiJeReFGREREvIrCjYiIiHgVhRsRERHxKgo3IiIi4lUUbkRERMSrKNyIiIiIV1G4EREREa+icCMiIiJeReFGREREvIrbw82rr75KXFwcgYGB9O/fn7Vr11a6/+zZs+nUqRNBQUHExsYyYcIECgoK6qlaERER8XRuDTeLFi1i4sSJTJs2jY0bN9KjRw+GDh1KZmZmuft/8MEHTJ48mWnTprFjxw7eeustFi1axGOPPVbPlYuIiIincmu4eemll7j77rsZO3YsCQkJzJ07l+DgYObNm1fu/qtXr2bAgAHcfPPNxMXFMWTIEEaNGlXl0x4RERFpPNwWboqKitiwYQODBg06W4yPD4MGDSI5ObncYy644AI2bNhgDzP79+/n66+/5sorr6zwOoWFhWRnZzv8iIiIiPfyddeFjx8/jsViISoqymF7VFQUO3fuLPeYm2++mePHj3PhhRdiGAYlJSXce++9lTZLzZo1i+nTp7u0dhEREfFcbu9QXB0rVqxg5syZvPbaa2zcuJFPPvmExYsX8/TTT1d4zJQpU8jKyrL/HD58uB4rFhERkfrmtic3ERERmM1mMjIyHLZnZGQQHR1d7jFPPvkkt912G3fddRcA3bp1Iy8vj3vuuYfHH38cH5+yWS0gIICAgADXfwARERHxSG57cuPv70+fPn1YtmyZfZvVamXZsmUkJSWVe0x+fn6ZAGM2mwEwDKPuihUREZEGw21PbgAmTpzImDFj6Nu3L4mJ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XVrh/iIiItK4uL1ZauLEiYwZM4a+ffuSmJjI7NmzycvLY+zYsQCMHj2a1q1bM2vWLAAefPBBLrnkEl588UWuuuoqFi5cyPr163njjTfc+TFERETEQ7g93IwcOZJjx44xdepU0tPT6dmzJ0uWLLF3Gj506JDDVMwXXHABH3zwAU888QSPPfYYHTt25LPPPqNr167u+gh2AQEBTJs2rUwzmJSle+U83Svn6V45T/eqenS/nOcJ98rt89yIiIiIuJLbZygWERERcSWFGxEREfEqCjciIiLiVRRuRERExKso3LjIq6++SlxcHIGBgfTv35+1a9e6uyS3e+qppzCZTA4/5513nv39goIC7r//flq0aEFISAjXXXddmQkavdmPP/7I8OHDadWqFSaTqcz6aIZhMHXqVGJiYggKCmLQoEHs2bPHYZ+TJ09yyy23EBoaSnh4OHfeeSe5ubn1+CnqR1X36vbbby/ztzZs2DCHfRrDvZo1axb9+vWjadOmREZGMmLECHbt2uWwjzP/7g4dOsRVV11FcHAwkZGRPProo5SUlNTnR6lzztyrSy+9tMzf1b333uuwT2O4VwCvv/463bt3t0/Ml5SUxDfffGN/39P+rhRuXGDRokVMnDiRadOmsXHjRnr06MHQoUPJzMx0d2lu16VLF9LS0uw/P//8s/29CRMm8OWXX/LRRx+xcuVKjh49yrXXXuvGautXXl4ePXr04NVXXy33/eeee45//vOfzJ07lzVr1tCkSROGDh1KQUGBfZ9bbrmFbdu2sXTpUr766it+/PFH7rnnnvr6CPWmqnsFMGzYMIe/tQULFji83xju1cqVK7n//vv55ZdfWLp0KcXFxQwZMoS8vDz7PlX9u7NYLFx11VUUFRWxevVq3nnnHebPn8/UqVPd8ZHqjDP3CuDuu+92+Lt67rnn7O81lnsF0KZNG5555hk2bNjA+vXrufzyy7n66qvZtm0b4IF/V4bUWmJionH//ffbX1ssFqNVq1bGrFmz3FiV+02bNs3o0aNHue+dPn3a8PPzMz766CP7th07dhiAkZycXE8Veg7A+PTTT+2vrVarER0dbTz//PP2badPnzYCAgKMBQsWGIZhGNu3bzcAY926dfZ9vvnmG8NkMhlHjhypt9rr2x/vlWEYxpgxY4yrr766wmMa673KzMw0AGPlypWGYTj37+7rr782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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Dropout\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from dataset.mnist import load_mnist\n",
    "from common.optimizer import *\n",
    "from common.util import smooth_curve\n",
    "from common.multi_layer_net_extend import MultiLayerNetExtend\n",
    "from common.trainer import Trainer\n",
    "\n",
    "# 0.读入MNIST数据\n",
    "(x_train, t_train), (x_test, t_test) = load_mnist(normalize=True)\n",
    "\n",
    "# 减少学习数据\n",
    "x_train = x_train[:300]\n",
    "t_train = t_train[:300]\n",
    "\n",
    "# 设置是否使用Dropout及比例\n",
    "use_dropout = True\n",
    "dropout_ratio = 0.2\n",
    "\n",
    "network = MultiLayerNetExtend(input_size=784, hidden_size_list=[100, 100, 100, 100, 100, 100],\n",
    "                              output_size=10, use_dropout=use_dropout, dropout_ration=dropout_ratio)\n",
    "trainer = Trainer(network, x_train, t_train, x_test, t_test,\n",
    "                  epochs=301, mini_batch_size=100,\n",
    "                  optimizer='sgd', optimizer_param={'lr': 0.01}, verbose=True)\n",
    "\n",
    "trainer.train()\n",
    "\n",
    "# 训练精准度列表\n",
    "train_acc_list = trainer.train_acc_list\n",
    "test_acc_list = trainer.test_acc_list\n",
    "\n",
    "# 绘制图像\n",
    "markers = {\"train\": \"o\", \"test\": \"s\"}\n",
    "x = np.arange(len(train_acc_list))\n",
    "plt.plot(x, smooth_curve(train_acc_list), marker='o', label='train', markevery=10)\n",
    "plt.plot(x, smooth_curve(test_acc_list), marker='s', label='test', markevery=10)\n",
    "plt.xlabel(\"epochs\")\n",
    "plt.ylabel(\"accuracy\")\n",
    "plt.ylim(0, 1.0)\n",
    "plt.legend(loc='lower right')\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    }
   }
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}